{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "japanese-margin",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'C:\\\\Users\\\\IDEA'"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import os\n",
    "os.getcwd()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "executive-insulin",
   "metadata": {},
   "outputs": [],
   "source": [
    "os.chdir('E:\\\\2023\\\\bovids')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "0888b480",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'E:\\\\2023\\\\bovids'"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%pwd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "d29220ca",
   "metadata": {},
   "outputs": [],
   "source": [
    "from tensorflow import keras\n",
    "keras.__version__\n",
    "import os, shutil"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "d979c4e9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "E:\\2023\\bovids\n",
      "E:\\2023\\bovids\\conv\n",
      "True\n"
     ]
    }
   ],
   "source": [
    "#make sure there is an empty folder in directory named \"conv\"\n",
    "original_dir = os.path.abspath('E:\\\\2023\\\\bovids')\n",
    "# The directory where we will\n",
    "# store our smaller dataset\n",
    "base_dir = os.path.join(original_dir, \"conv\")\n",
    "print(original_dir)\n",
    "print(base_dir)\n",
    "# added by reviewer\n",
    "isdir = os.path.isdir(base_dir) \n",
    "print(isdir) \n",
    "\n",
    "if isdir ==True:\n",
    "    shutil.rmtree(base_dir)\n",
    "\n",
    "os.mkdir(base_dir)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "6b486b83",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Directories for our training,\n",
    "# validation and test splits\n",
    "train_dir = os.path.join(base_dir, 'train')\n",
    "os.mkdir(train_dir)\n",
    "validation_dir = os.path.join(base_dir, 'validation')\n",
    "os.mkdir(validation_dir)\n",
    "\n",
    "# Directory with our training alcelaphini pictures\n",
    "train_alc_dir = os.path.join(train_dir, 'alcelaphini')\n",
    "os.mkdir(train_alc_dir)\n",
    "\n",
    "# Directory with our training antilopini pictures\n",
    "train_ant_dir = os.path.join(train_dir, 'antilopini')\n",
    "os.mkdir(train_ant_dir)\n",
    "\n",
    "# Directory with our training hippotragini pictures\n",
    "train_hip_dir = os.path.join(train_dir, 'hippotragini')\n",
    "os.mkdir(train_hip_dir)\n",
    "\n",
    "# Directory with our training reduncini pictures\n",
    "train_red_dir = os.path.join(train_dir, 'reduncini')\n",
    "os.mkdir(train_red_dir)\n",
    "\n",
    "# Directory with our training tragelaphini pictures\n",
    "train_tra_dir = os.path.join(train_dir, 'tragelaphini')\n",
    "os.mkdir(train_tra_dir)\n",
    "\n",
    "\n",
    "\n",
    "# Directory with our validation alcelaphini pictures\n",
    "validation_alc_dir = os.path.join(validation_dir, 'alcelaphini')\n",
    "os.mkdir(validation_alc_dir)\n",
    "\n",
    "# Directory with our validation antilopini pictures\n",
    "validation_ant_dir = os.path.join(validation_dir, 'antilopini')\n",
    "os.mkdir(validation_ant_dir)\n",
    "\n",
    "# Directory with our validation hippotragini pictures\n",
    "validation_hip_dir = os.path.join(validation_dir, 'hippotragini')\n",
    "os.mkdir(validation_hip_dir)\n",
    "\n",
    "# Directory with our validation reduncini pictures\n",
    "validation_red_dir = os.path.join(validation_dir, 'reduncini')\n",
    "os.mkdir(validation_red_dir)\n",
    "\n",
    "# Directory with our validation tragelaphini pictures\n",
    "validation_tra_dir = os.path.join(validation_dir, 'tragelaphini')\n",
    "os.mkdir(validation_tra_dir)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "convenient-least",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "679\n",
      "['alcelaphini.848.jpg', 'alcelaphini.767.jpg', 'alcelaphini.287.jpg', 'alcelaphini.295.jpg', 'alcelaphini.207.jpg', 'alcelaphini.220.jpg', 'alcelaphini.307.jpg', 'alcelaphini.853.jpg', 'alcelaphini.83.jpg', 'alcelaphini.88.jpg', 'alcelaphini.68.jpg', 'alcelaphini.833.jpg', 'alcelaphini.387.jpg', 'alcelaphini.952.jpg', 'alcelaphini.20.jpg', 'alcelaphini.205.jpg', 'alcelaphini.377.jpg', 'alcelaphini.167.jpg', 'alcelaphini.567.jpg', 'alcelaphini.516.jpg', 'alcelaphini.619.jpg', 'alcelaphini.239.jpg', 'alcelaphini.725.jpg', 'alcelaphini.498.jpg', 'alcelaphini.151.jpg', 'alcelaphini.379.jpg', 'alcelaphini.660.jpg', 'alcelaphini.930.jpg', 'alcelaphini.708.jpg', 'alcelaphini.19.jpg', 'alcelaphini.352.jpg', 'alcelaphini.926.jpg', 'alcelaphini.955.jpg', 'alcelaphini.188.jpg', 'alcelaphini.344.jpg', 'alcelaphini.158.jpg', 'alcelaphini.904.jpg', 'alcelaphini.524.jpg', 'alcelaphini.165.jpg', 'alcelaphini.662.jpg', 'alcelaphini.912.jpg', 'alcelaphini.800.jpg', 'alcelaphini.750.jpg', 'alcelaphini.475.jpg', 'alcelaphini.442.jpg', 'alcelaphini.834.jpg', 'alcelaphini.809.jpg', 'alcelaphini.49.jpg', 'alcelaphini.130.jpg', 'alcelaphini.254.jpg', 'alcelaphini.574.jpg', 'alcelaphini.505.jpg', 'alcelaphini.459.jpg', 'alcelaphini.257.jpg', 'alcelaphini.483.jpg', 'alcelaphini.277.jpg', 'alcelaphini.421.jpg', 'alcelaphini.760.jpg', 'alcelaphini.553.jpg', 'alcelaphini.685.jpg', 'alcelaphini.185.jpg', 'alcelaphini.656.jpg', 'alcelaphini.908.jpg', 'alcelaphini.884.jpg', 'alcelaphini.428.jpg', 'alcelaphini.909.jpg', 'alcelaphini.497.jpg', 'alcelaphini.888.jpg', 'alcelaphini.110.jpg', 'alcelaphini.639.jpg', 'alcelaphini.849.jpg', 'alcelaphini.717.jpg', 'alcelaphini.317.jpg', 'alcelaphini.0.jpg', 'alcelaphini.69.jpg', 'alcelaphini.914.jpg', 'alcelaphini.594.jpg', 'alcelaphini.675.jpg', 'alcelaphini.23.jpg', 'alcelaphini.285.jpg', 'alcelaphini.216.jpg', 'alcelaphini.836.jpg', 'alcelaphini.892.jpg', 'alcelaphini.761.jpg', 'alcelaphini.953.jpg', 'alcelaphini.419.jpg', 'alcelaphini.882.jpg', 'alcelaphini.210.jpg', 'alcelaphini.564.jpg', 'alcelaphini.55.jpg', 'alcelaphini.163.jpg', 'alcelaphini.176.jpg', 'alcelaphini.822.jpg', 'alcelaphini.478.jpg', 'alcelaphini.713.jpg', 'alcelaphini.742.jpg', 'alcelaphini.815.jpg', 'alcelaphini.576.jpg', 'alcelaphini.203.jpg', 'alcelaphini.748.jpg', 'alcelaphini.407.jpg', 'alcelaphini.961.jpg', 'alcelaphini.343.jpg', 'alcelaphini.11.jpg', 'alcelaphini.597.jpg', 'alcelaphini.733.jpg', 'alcelaphini.785.jpg', 'alcelaphini.951.jpg', 'alcelaphini.608.jpg', 'alcelaphini.134.jpg', 'alcelaphini.238.jpg', 'alcelaphini.515.jpg', 'alcelaphini.454.jpg', 'alcelaphini.70.jpg', 'alcelaphini.810.jpg', 'alcelaphini.112.jpg', 'alcelaphini.947.jpg', 'alcelaphini.906.jpg', 'alcelaphini.181.jpg', 'alcelaphini.634.jpg', 'alcelaphini.305.jpg', 'alcelaphini.262.jpg', 'alcelaphini.227.jpg', 'alcelaphini.752.jpg', 'alcelaphini.652.jpg', 'alcelaphini.538.jpg', 'alcelaphini.610.jpg', 'alcelaphini.528.jpg', 'alcelaphini.859.jpg', 'alcelaphini.242.jpg', 'alcelaphini.499.jpg', 'alcelaphini.600.jpg', 'alcelaphini.758.jpg', 'alcelaphini.326.jpg', 'alcelaphini.300.jpg', 'alcelaphini.201.jpg', 'alcelaphini.416.jpg', 'alcelaphini.189.jpg', 'alcelaphini.883.jpg', 'alcelaphini.261.jpg', 'alcelaphini.510.jpg', 'alcelaphini.653.jpg', 'alcelaphini.550.jpg', 'alcelaphini.768.jpg', 'alcelaphini.341.jpg', 'alcelaphini.224.jpg', 'alcelaphini.566.jpg', 'alcelaphini.124.jpg', 'alcelaphini.92.jpg', 'alcelaphini.720.jpg', 'alcelaphini.579.jpg', 'alcelaphini.841.jpg', 'alcelaphini.530.jpg', 'alcelaphini.895.jpg', 'alcelaphini.152.jpg', 'alcelaphini.84.jpg', 'alcelaphini.629.jpg', 'alcelaphini.648.jpg', 'alcelaphini.835.jpg', 'alcelaphini.381.jpg', 'alcelaphini.396.jpg', 'alcelaphini.544.jpg', 'alcelaphini.131.jpg', 'alcelaphini.249.jpg', 'alcelaphini.887.jpg', 'alcelaphini.595.jpg', 'alcelaphini.184.jpg', 'alcelaphini.333.jpg', 'alcelaphini.650.jpg', 'alcelaphini.959.jpg', 'alcelaphini.489.jpg', 'alcelaphini.291.jpg', 'alcelaphini.209.jpg', 'alcelaphini.280.jpg', 'alcelaphini.820.jpg', 'alcelaphini.540.jpg', 'alcelaphini.116.jpg', 'alcelaphini.125.jpg', 'alcelaphini.370.jpg', 'alcelaphini.298.jpg', 'alcelaphini.916.jpg', 'alcelaphini.502.jpg', 'alcelaphini.62.jpg', 'alcelaphini.437.jpg', 'alcelaphini.10.jpg', 'alcelaphini.80.jpg', 'alcelaphini.756.jpg', 'alcelaphini.565.jpg', 'alcelaphini.398.jpg', 'alcelaphini.571.jpg', 'alcelaphini.715.jpg', 'alcelaphini.900.jpg', 'alcelaphini.740.jpg', 'alcelaphini.226.jpg', 'alcelaphini.465.jpg', 'alcelaphini.8.jpg', 'alcelaphini.736.jpg', 'alcelaphini.138.jpg', 'alcelaphini.293.jpg', 'alcelaphini.438.jpg', 'alcelaphini.258.jpg', 'alcelaphini.154.jpg', 'alcelaphini.921.jpg', 'alcelaphini.57.jpg', 'alcelaphini.60.jpg', 'alcelaphini.484.jpg', 'alcelaphini.773.jpg', 'alcelaphini.710.jpg', 'alcelaphini.471.jpg', 'alcelaphini.531.jpg', 'alcelaphini.924.jpg', 'alcelaphini.807.jpg', 'alcelaphini.128.jpg', 'alcelaphini.360.jpg', 'alcelaphini.337.jpg', 'alcelaphini.476.jpg', 'alcelaphini.114.jpg', 'alcelaphini.141.jpg', 'alcelaphini.938.jpg', 'alcelaphini.426.jpg', 'alcelaphini.781.jpg', 'alcelaphini.751.jpg', 'alcelaphini.858.jpg', 'alcelaphini.127.jpg', 'alcelaphini.613.jpg', 'alcelaphini.58.jpg', 'alcelaphini.637.jpg', 'alcelaphini.873.jpg', 'alcelaphini.39.jpg', 'alcelaphini.712.jpg', 'alcelaphini.143.jpg', 'alcelaphini.678.jpg', 'alcelaphini.861.jpg', 'alcelaphini.935.jpg', 'alcelaphini.286.jpg', 'alcelaphini.646.jpg', 'alcelaphini.441.jpg', 'alcelaphini.512.jpg', 'alcelaphini.117.jpg', 'alcelaphini.348.jpg', 'alcelaphini.331.jpg', 'alcelaphini.838.jpg', 'alcelaphini.100.jpg', 'alcelaphini.696.jpg', 'alcelaphini.271.jpg', 'alcelaphini.854.jpg', 'alcelaphini.217.jpg', 'alcelaphini.104.jpg', 'alcelaphini.599.jpg', 'alcelaphini.29.jpg', 'alcelaphini.915.jpg', 'alcelaphini.556.jpg', 'alcelaphini.21.jpg', 'alcelaphini.221.jpg', 'alcelaphini.230.jpg', 'alcelaphini.821.jpg', 'alcelaphini.133.jpg', 'alcelaphini.3.jpg', 'alcelaphini.657.jpg', 'alcelaphini.683.jpg', 'alcelaphini.885.jpg', 'alcelaphini.923.jpg', 'alcelaphini.236.jpg', 'alcelaphini.423.jpg', 'alcelaphini.744.jpg', 'alcelaphini.380.jpg', 'alcelaphini.878.jpg', 'alcelaphini.386.jpg', 'alcelaphini.936.jpg', 'alcelaphini.934.jpg', 'alcelaphini.145.jpg', 'alcelaphini.208.jpg', 'alcelaphini.782.jpg', 'alcelaphini.256.jpg', 'alcelaphini.150.jpg', 'alcelaphini.823.jpg', 'alcelaphini.902.jpg', 'alcelaphini.174.jpg', 'alcelaphini.684.jpg', 'alcelaphini.772.jpg', 'alcelaphini.831.jpg', 'alcelaphini.402.jpg', 'alcelaphini.738.jpg', 'alcelaphini.417.jpg', 'alcelaphini.919.jpg', 'alcelaphini.812.jpg', 'alcelaphini.493.jpg', 'alcelaphini.106.jpg', 'alcelaphini.638.jpg', 'alcelaphini.322.jpg', 'alcelaphini.559.jpg', 'alcelaphini.927.jpg', 'alcelaphini.232.jpg', 'alcelaphini.593.jpg', 'alcelaphini.107.jpg', 'alcelaphini.918.jpg', 'alcelaphini.627.jpg', 'alcelaphini.202.jpg', 'alcelaphini.777.jpg', 'alcelaphini.345.jpg', 'alcelaphini.275.jpg', 'alcelaphini.376.jpg', 'alcelaphini.824.jpg', 'alcelaphini.323.jpg', 'alcelaphini.645.jpg', 'alcelaphini.470.jpg', 'alcelaphini.364.jpg', 'alcelaphini.306.jpg', 'alcelaphini.263.jpg', 'alcelaphini.784.jpg', 'alcelaphini.920.jpg', 'alcelaphini.366.jpg', 'alcelaphini.123.jpg', 'alcelaphini.724.jpg', 'alcelaphini.276.jpg', 'alcelaphini.818.jpg', 'alcelaphini.448.jpg', 'alcelaphini.804.jpg', 'alcelaphini.726.jpg', 'alcelaphini.159.jpg', 'alcelaphini.219.jpg', 'alcelaphini.867.jpg', 'alcelaphini.547.jpg', 'alcelaphini.755.jpg', 'alcelaphini.52.jpg', 'alcelaphini.435.jpg', 'alcelaphini.651.jpg', 'alcelaphini.412.jpg', 'alcelaphini.113.jpg', 'alcelaphini.852.jpg', 'alcelaphini.187.jpg', 'alcelaphini.886.jpg', 'alcelaphini.604.jpg', 'alcelaphini.500.jpg', 'alcelaphini.18.jpg', 'alcelaphini.41.jpg', 'alcelaphini.312.jpg', 'alcelaphini.350.jpg', 'alcelaphini.460.jpg', 'alcelaphini.267.jpg', 'alcelaphini.270.jpg', 'alcelaphini.759.jpg', 'alcelaphini.674.jpg', 'alcelaphini.529.jpg', 'alcelaphini.404.jpg', 'alcelaphini.789.jpg', 'alcelaphini.630.jpg', 'alcelaphini.825.jpg', 'alcelaphini.328.jpg', 'alcelaphini.517.jpg', 'alcelaphini.581.jpg', 'alcelaphini.956.jpg', 'alcelaphini.288.jpg', 'alcelaphini.625.jpg', 'alcelaphini.802.jpg', 'alcelaphini.266.jpg', 'alcelaphini.253.jpg', 'alcelaphini.400.jpg', 'alcelaphini.140.jpg', 'alcelaphini.894.jpg', 'alcelaphini.367.jpg', 'alcelaphini.670.jpg', 'alcelaphini.560.jpg', 'alcelaphini.302.jpg', 'alcelaphini.749.jpg', 'alcelaphini.22.jpg', 'alcelaphini.905.jpg', 'alcelaphini.543.jpg', 'alcelaphini.388.jpg', 'alcelaphini.259.jpg', 'alcelaphini.173.jpg', 'alcelaphini.960.jpg', 'alcelaphini.731.jpg', 'alcelaphini.805.jpg', 'alcelaphini.231.jpg', 'alcelaphini.541.jpg', 'alcelaphini.504.jpg', 'alcelaphini.631.jpg', 'alcelaphini.555.jpg', 'alcelaphini.427.jpg', 'alcelaphini.506.jpg', 'alcelaphini.89.jpg', 'alcelaphini.876.jpg', 'alcelaphini.237.jpg', 'alcelaphini.874.jpg', 'alcelaphini.891.jpg', 'alcelaphini.59.jpg', 'alcelaphini.444.jpg', 'alcelaphini.342.jpg', 'alcelaphini.411.jpg', 'alcelaphini.582.jpg', 'alcelaphini.13.jpg', 'alcelaphini.948.jpg', 'alcelaphini.487.jpg', 'alcelaphini.819.jpg', 'alcelaphini.661.jpg', 'alcelaphini.640.jpg', 'alcelaphini.542.jpg', 'alcelaphini.468.jpg', 'alcelaphini.863.jpg', 'alcelaphini.741.jpg', 'alcelaphini.762.jpg', 'alcelaphini.545.jpg', 'alcelaphini.311.jpg', 'alcelaphini.687.jpg', 'alcelaphini.324.jpg', 'alcelaphini.30.jpg', 'alcelaphini.636.jpg', 'alcelaphini.74.jpg', 'alcelaphini.694.jpg', 'alcelaphini.218.jpg', 'alcelaphini.264.jpg', 'alcelaphini.626.jpg', 'alcelaphini.325.jpg', 'alcelaphini.132.jpg', 'alcelaphini.527.jpg', 'alcelaphini.1.jpg', 'alcelaphini.701.jpg', 'alcelaphini.845.jpg', 'alcelaphini.413.jpg', 'alcelaphini.316.jpg', 'alcelaphini.361.jpg', 'alcelaphini.147.jpg', 'alcelaphini.672.jpg', 'alcelaphini.274.jpg', 'alcelaphini.575.jpg', 'alcelaphini.721.jpg', 'alcelaphini.72.jpg', 'alcelaphini.765.jpg', 'alcelaphini.829.jpg', 'alcelaphini.40.jpg', 'alcelaphini.780.jpg', 'alcelaphini.78.jpg', 'alcelaphini.6.jpg', 'alcelaphini.778.jpg', 'alcelaphini.46.jpg', 'alcelaphini.606.jpg', 'alcelaphini.129.jpg', 'alcelaphini.135.jpg', 'alcelaphini.520.jpg', 'alcelaphini.793.jpg', 'alcelaphini.340.jpg', 'alcelaphini.730.jpg', 'alcelaphini.365.jpg', 'alcelaphini.521.jpg', 'alcelaphini.536.jpg', 'alcelaphini.453.jpg', 'alcelaphini.907.jpg', 'alcelaphini.723.jpg', 'alcelaphini.514.jpg', 'alcelaphini.95.jpg', 'alcelaphini.171.jpg', 'alcelaphini.233.jpg', 'alcelaphini.235.jpg', 'alcelaphini.539.jpg', 'alcelaphini.192.jpg', 'alcelaphini.359.jpg', 'alcelaphini.27.jpg', 'alcelaphini.86.jpg', 'alcelaphini.526.jpg', 'alcelaphini.509.jpg', 'alcelaphini.215.jpg', 'alcelaphini.319.jpg', 'alcelaphini.93.jpg', 'alcelaphini.692.jpg', 'alcelaphini.378.jpg', 'alcelaphini.222.jpg', 'alcelaphini.338.jpg', 'alcelaphini.707.jpg', 'alcelaphini.34.jpg', 'alcelaphini.492.jpg', 'alcelaphini.354.jpg', 'alcelaphini.480.jpg', 'alcelaphini.860.jpg', 'alcelaphini.392.jpg', 'alcelaphini.394.jpg', 'alcelaphini.623.jpg', 'alcelaphini.28.jpg', 'alcelaphini.429.jpg', 'alcelaphini.14.jpg', 'alcelaphini.63.jpg', 'alcelaphini.792.jpg', 'alcelaphini.813.jpg', 'alcelaphini.962.jpg', 'alcelaphini.389.jpg', 'alcelaphini.282.jpg', 'alcelaphini.447.jpg', 'alcelaphini.706.jpg', 'alcelaphini.304.jpg', 'alcelaphini.299.jpg', 'alcelaphini.279.jpg', 'alcelaphini.314.jpg', 'alcelaphini.197.jpg', 'alcelaphini.495.jpg', 'alcelaphini.463.jpg', 'alcelaphini.126.jpg', 'alcelaphini.103.jpg', 'alcelaphini.420.jpg', 'alcelaphini.671.jpg', 'alcelaphini.148.jpg', 'alcelaphini.65.jpg', 'alcelaphini.105.jpg', 'alcelaphini.9.jpg', 'alcelaphini.87.jpg', 'alcelaphini.403.jpg', 'alcelaphini.946.jpg', 'alcelaphini.320.jpg', 'alcelaphini.558.jpg', 'alcelaphini.183.jpg', 'alcelaphini.24.jpg', 'alcelaphini.372.jpg', 'alcelaphini.855.jpg', 'alcelaphini.346.jpg', 'alcelaphini.440.jpg', 'alcelaphini.17.jpg', 'alcelaphini.889.jpg', 'alcelaphini.409.jpg', 'alcelaphini.76.jpg', 'alcelaphini.26.jpg', 'alcelaphini.193.jpg', 'alcelaphini.699.jpg', 'alcelaphini.939.jpg', 'alcelaphini.294.jpg', 'alcelaphini.223.jpg', 'alcelaphini.408.jpg', 'alcelaphini.644.jpg', 'alcelaphini.485.jpg', 'alcelaphini.522.jpg', 'alcelaphini.586.jpg', 'alcelaphini.234.jpg', 'alcelaphini.395.jpg', 'alcelaphini.614.jpg', 'alcelaphini.12.jpg', 'alcelaphini.297.jpg', 'alcelaphini.250.jpg', 'alcelaphini.486.jpg', 'alcelaphini.719.jpg', 'alcelaphini.561.jpg', 'alcelaphini.795.jpg', 'alcelaphini.746.jpg', 'alcelaphini.573.jpg', 'alcelaphini.432.jpg', 'alcelaphini.109.jpg', 'alcelaphini.240.jpg', 'alcelaphini.121.jpg', 'alcelaphini.764.jpg', 'alcelaphini.96.jpg', 'alcelaphini.857.jpg', 'alcelaphini.590.jpg', 'alcelaphini.584.jpg', 'alcelaphini.806.jpg', 'alcelaphini.570.jpg', 'alcelaphini.177.jpg', 'alcelaphini.38.jpg', 'alcelaphini.769.jpg', 'alcelaphini.479.jpg', 'alcelaphini.415.jpg', 'alcelaphini.647.jpg', 'alcelaphini.739.jpg', 'alcelaphini.958.jpg', 'alcelaphini.587.jpg', 'alcelaphini.612.jpg', 'alcelaphini.79.jpg', 'alcelaphini.877.jpg', 'alcelaphini.405.jpg', 'alcelaphini.43.jpg', 'alcelaphini.851.jpg', 'alcelaphini.649.jpg', 'alcelaphini.747.jpg', 'alcelaphini.102.jpg', 'alcelaphini.844.jpg', 'alcelaphini.50.jpg', 'alcelaphini.228.jpg', 'alcelaphini.318.jpg', 'alcelaphini.798.jpg', 'alcelaphini.53.jpg', 'alcelaphini.783.jpg', 'alcelaphini.385.jpg', 'alcelaphini.603.jpg', 'alcelaphini.693.jpg', 'alcelaphini.965.jpg', 'alcelaphini.194.jpg', 'alcelaphini.191.jpg', 'alcelaphini.42.jpg', 'alcelaphini.156.jpg', 'alcelaphini.897.jpg', 'alcelaphini.99.jpg', 'alcelaphini.727.jpg', 'alcelaphini.801.jpg', 'alcelaphini.771.jpg', 'alcelaphini.525.jpg', 'alcelaphini.797.jpg', 'alcelaphini.775.jpg', 'alcelaphini.698.jpg', 'alcelaphini.362.jpg', 'alcelaphini.179.jpg', 'alcelaphini.716.jpg', 'alcelaphini.462.jpg', 'alcelaphini.482.jpg', 'alcelaphini.455.jpg', 'alcelaphini.149.jpg', 'alcelaphini.61.jpg', 'alcelaphini.695.jpg', 'alcelaphini.963.jpg', 'alcelaphini.635.jpg', 'alcelaphini.618.jpg', 'alcelaphini.90.jpg', 'alcelaphini.928.jpg', 'alcelaphini.523.jpg', 'alcelaphini.911.jpg', 'alcelaphini.31.jpg', 'alcelaphini.850.jpg', 'alcelaphini.353.jpg', 'alcelaphini.120.jpg', 'alcelaphini.161.jpg', 'alcelaphini.175.jpg', 'alcelaphini.881.jpg', 'alcelaphini.898.jpg', 'alcelaphini.679.jpg', 'alcelaphini.910.jpg', 'alcelaphini.578.jpg', 'alcelaphini.890.jpg', 'alcelaphini.788.jpg', 'alcelaphini.592.jpg', 'alcelaphini.48.jpg', 'alcelaphini.334.jpg', 'alcelaphini.663.jpg', 'alcelaphini.766.jpg', 'alcelaphini.866.jpg', 'alcelaphini.588.jpg', 'alcelaphini.347.jpg', 'alcelaphini.206.jpg', 'alcelaphini.401.jpg', 'alcelaphini.659.jpg', 'alcelaphini.607.jpg', 'alcelaphini.842.jpg', 'alcelaphini.967.jpg', 'alcelaphini.641.jpg', 'alcelaphini.732.jpg', 'alcelaphini.937.jpg', 'alcelaphini.655.jpg', 'alcelaphini.583.jpg', 'alcelaphini.225.jpg', 'alcelaphini.54.jpg', 'alcelaphini.569.jpg', 'alcelaphini.97.jpg', 'alcelaphini.722.jpg', 'alcelaphini.666.jpg', 'alcelaphini.246.jpg', 'alcelaphini.190.jpg', 'alcelaphini.620.jpg', 'alcelaphini.688.jpg', 'alcelaphini.382.jpg', 'alcelaphini.704.jpg', 'alcelaphini.406.jpg', 'alcelaphini.75.jpg', 'alcelaphini.329.jpg', 'alcelaphini.847.jpg', 'alcelaphini.728.jpg', 'alcelaphini.16.jpg', 'alcelaphini.313.jpg', 'alcelaphini.734.jpg', 'alcelaphini.67.jpg', 'alcelaphini.577.jpg', 'alcelaphini.872.jpg', 'alcelaphini.940.jpg', 'alcelaphini.172.jpg', 'alcelaphini.681.jpg', 'alcelaphini.375.jpg', 'alcelaphini.552.jpg', 'alcelaphini.85.jpg', 'alcelaphini.957.jpg', 'alcelaphini.601.jpg', 'alcelaphini.737.jpg', 'alcelaphini.776.jpg', 'alcelaphini.816.jpg', 'alcelaphini.283.jpg', 'alcelaphini.803.jpg', 'alcelaphini.349.jpg']\n",
      "289\n",
      "['alcelaphini.654.jpg', 'alcelaphini.869.jpg', 'alcelaphini.827.jpg', 'alcelaphini.269.jpg', 'alcelaphini.519.jpg', 'alcelaphini.814.jpg', 'alcelaphini.518.jpg', 'alcelaphini.301.jpg', 'alcelaphini.477.jpg', 'alcelaphini.289.jpg', 'alcelaphini.754.jpg', 'alcelaphini.198.jpg', 'alcelaphini.705.jpg', 'alcelaphini.925.jpg', 'alcelaphini.368.jpg', 'alcelaphini.260.jpg', 'alcelaphini.356.jpg', 'alcelaphini.56.jpg', 'alcelaphini.745.jpg', 'alcelaphini.799.jpg', 'alcelaphini.71.jpg', 'alcelaphini.204.jpg', 'alcelaphini.667.jpg', 'alcelaphini.391.jpg', 'alcelaphini.418.jpg', 'alcelaphini.624.jpg', 'alcelaphini.434.jpg', 'alcelaphini.214.jpg', 'alcelaphini.7.jpg', 'alcelaphini.709.jpg', 'alcelaphini.642.jpg', 'alcelaphini.118.jpg', 'alcelaphini.373.jpg', 'alcelaphini.774.jpg', 'alcelaphini.272.jpg', 'alcelaphini.213.jpg', 'alcelaphini.568.jpg', 'alcelaphini.680.jpg', 'alcelaphini.828.jpg', 'alcelaphini.770.jpg', 'alcelaphini.856.jpg', 'alcelaphini.711.jpg', 'alcelaphini.474.jpg', 'alcelaphini.315.jpg', 'alcelaphini.700.jpg', 'alcelaphini.870.jpg', 'alcelaphini.212.jpg', 'alcelaphini.436.jpg', 'alcelaphini.913.jpg', 'alcelaphini.605.jpg', 'alcelaphini.954.jpg', 'alcelaphini.186.jpg', 'alcelaphini.787.jpg', 'alcelaphini.196.jpg', 'alcelaphini.808.jpg', 'alcelaphini.609.jpg', 'alcelaphini.945.jpg', 'alcelaphini.144.jpg', 'alcelaphini.488.jpg', 'alcelaphini.686.jpg', 'alcelaphini.166.jpg', 'alcelaphini.292.jpg', 'alcelaphini.108.jpg', 'alcelaphini.563.jpg', 'alcelaphini.611.jpg', 'alcelaphini.47.jpg', 'alcelaphini.91.jpg', 'alcelaphini.296.jpg', 'alcelaphini.735.jpg', 'alcelaphini.252.jpg', 'alcelaphini.839.jpg', 'alcelaphini.303.jpg', 'alcelaphini.119.jpg', 'alcelaphini.25.jpg', 'alcelaphini.490.jpg', 'alcelaphini.643.jpg', 'alcelaphini.589.jpg', 'alcelaphini.602.jpg', 'alcelaphini.658.jpg', 'alcelaphini.200.jpg', 'alcelaphini.703.jpg', 'alcelaphini.966.jpg', 'alcelaphini.633.jpg', 'alcelaphini.330.jpg', 'alcelaphini.243.jpg', 'alcelaphini.757.jpg', 'alcelaphini.157.jpg', 'alcelaphini.535.jpg', 'alcelaphini.817.jpg', 'alcelaphini.665.jpg', 'alcelaphini.336.jpg', 'alcelaphini.433.jpg', 'alcelaphini.779.jpg', 'alcelaphini.714.jpg', 'alcelaphini.265.jpg', 'alcelaphini.743.jpg', 'alcelaphini.351.jpg', 'alcelaphini.457.jpg', 'alcelaphini.896.jpg', 'alcelaphini.903.jpg', 'alcelaphini.469.jpg', 'alcelaphini.941.jpg', 'alcelaphini.496.jpg', 'alcelaphini.464.jpg', 'alcelaphini.622.jpg', 'alcelaphini.111.jpg', 'alcelaphini.155.jpg', 'alcelaphini.94.jpg', 'alcelaphini.358.jpg', 'alcelaphini.51.jpg', 'alcelaphini.901.jpg', 'alcelaphini.548.jpg', 'alcelaphini.449.jpg', 'alcelaphini.2.jpg', 'alcelaphini.36.jpg', 'alcelaphini.425.jpg', 'alcelaphini.101.jpg', 'alcelaphini.451.jpg', 'alcelaphini.572.jpg', 'alcelaphini.169.jpg', 'alcelaphini.718.jpg', 'alcelaphini.811.jpg', 'alcelaphini.397.jpg', 'alcelaphini.551.jpg', 'alcelaphini.865.jpg', 'alcelaphini.899.jpg', 'alcelaphini.554.jpg', 'alcelaphini.943.jpg', 'alcelaphini.139.jpg', 'alcelaphini.410.jpg', 'alcelaphini.472.jpg', 'alcelaphini.690.jpg', 'alcelaphini.950.jpg', 'alcelaphini.868.jpg', 'alcelaphini.64.jpg', 'alcelaphini.511.jpg', 'alcelaphini.616.jpg', 'alcelaphini.964.jpg', 'alcelaphini.532.jpg', 'alcelaphini.278.jpg', 'alcelaphini.537.jpg', 'alcelaphini.753.jpg', 'alcelaphini.247.jpg', 'alcelaphini.689.jpg', 'alcelaphini.507.jpg', 'alcelaphini.399.jpg', 'alcelaphini.162.jpg', 'alcelaphini.917.jpg', 'alcelaphini.414.jpg', 'alcelaphini.458.jpg', 'alcelaphini.933.jpg', 'alcelaphini.81.jpg', 'alcelaphini.248.jpg', 'alcelaphini.327.jpg', 'alcelaphini.339.jpg', 'alcelaphini.44.jpg', 'alcelaphini.729.jpg', 'alcelaphini.557.jpg', 'alcelaphini.5.jpg', 'alcelaphini.893.jpg', 'alcelaphini.445.jpg', 'alcelaphini.949.jpg', 'alcelaphini.355.jpg', 'alcelaphini.871.jpg', 'alcelaphini.491.jpg', 'alcelaphini.180.jpg', 'alcelaphini.796.jpg', 'alcelaphini.931.jpg', 'alcelaphini.840.jpg', 'alcelaphini.664.jpg', 'alcelaphini.676.jpg', 'alcelaphini.168.jpg', 'alcelaphini.309.jpg', 'alcelaphini.466.jpg', 'alcelaphini.273.jpg', 'alcelaphini.122.jpg', 'alcelaphini.182.jpg', 'alcelaphini.534.jpg', 'alcelaphini.632.jpg', 'alcelaphini.146.jpg', 'alcelaphini.281.jpg', 'alcelaphini.697.jpg', 'alcelaphini.251.jpg', 'alcelaphini.456.jpg', 'alcelaphini.424.jpg', 'alcelaphini.443.jpg', 'alcelaphini.357.jpg', 'alcelaphini.195.jpg', 'alcelaphini.826.jpg', 'alcelaphini.170.jpg', 'alcelaphini.452.jpg', 'alcelaphini.98.jpg', 'alcelaphini.791.jpg', 'alcelaphini.794.jpg', 'alcelaphini.115.jpg', 'alcelaphini.879.jpg', 'alcelaphini.615.jpg', 'alcelaphini.383.jpg', 'alcelaphini.580.jpg', 'alcelaphini.393.jpg', 'alcelaphini.153.jpg', 'alcelaphini.82.jpg', 'alcelaphini.875.jpg', 'alcelaphini.546.jpg', 'alcelaphini.73.jpg', 'alcelaphini.673.jpg', 'alcelaphini.621.jpg', 'alcelaphini.837.jpg', 'alcelaphini.308.jpg', 'alcelaphini.508.jpg', 'alcelaphini.32.jpg', 'alcelaphini.37.jpg', 'alcelaphini.244.jpg', 'alcelaphini.422.jpg', 'alcelaphini.229.jpg', 'alcelaphini.862.jpg', 'alcelaphini.160.jpg', 'alcelaphini.513.jpg', 'alcelaphini.864.jpg', 'alcelaphini.332.jpg', 'alcelaphini.598.jpg', 'alcelaphini.668.jpg', 'alcelaphini.66.jpg', 'alcelaphini.481.jpg', 'alcelaphini.446.jpg', 'alcelaphini.461.jpg', 'alcelaphini.562.jpg', 'alcelaphini.682.jpg', 'alcelaphini.321.jpg', 'alcelaphini.922.jpg', 'alcelaphini.790.jpg', 'alcelaphini.374.jpg', 'alcelaphini.549.jpg', 'alcelaphini.929.jpg', 'alcelaphini.199.jpg', 'alcelaphini.137.jpg', 'alcelaphini.241.jpg', 'alcelaphini.4.jpg', 'alcelaphini.596.jpg', 'alcelaphini.944.jpg', 'alcelaphini.384.jpg', 'alcelaphini.628.jpg', 'alcelaphini.450.jpg', 'alcelaphini.245.jpg', 'alcelaphini.942.jpg', 'alcelaphini.786.jpg', 'alcelaphini.932.jpg', 'alcelaphini.136.jpg', 'alcelaphini.371.jpg', 'alcelaphini.677.jpg', 'alcelaphini.310.jpg', 'alcelaphini.702.jpg', 'alcelaphini.178.jpg', 'alcelaphini.467.jpg', 'alcelaphini.268.jpg', 'alcelaphini.691.jpg', 'alcelaphini.846.jpg', 'alcelaphini.290.jpg', 'alcelaphini.431.jpg', 'alcelaphini.390.jpg', 'alcelaphini.363.jpg', 'alcelaphini.617.jpg', 'alcelaphini.142.jpg', 'alcelaphini.880.jpg', 'alcelaphini.430.jpg', 'alcelaphini.45.jpg', 'alcelaphini.369.jpg', 'alcelaphini.763.jpg', 'alcelaphini.255.jpg', 'alcelaphini.77.jpg', 'alcelaphini.335.jpg', 'alcelaphini.501.jpg', 'alcelaphini.533.jpg', 'alcelaphini.35.jpg', 'alcelaphini.164.jpg', 'alcelaphini.830.jpg', 'alcelaphini.669.jpg', 'alcelaphini.284.jpg', 'alcelaphini.843.jpg', 'alcelaphini.503.jpg', 'alcelaphini.832.jpg', 'alcelaphini.473.jpg', 'alcelaphini.211.jpg', 'alcelaphini.15.jpg', 'alcelaphini.591.jpg', 'alcelaphini.494.jpg', 'alcelaphini.439.jpg', 'alcelaphini.33.jpg', 'alcelaphini.585.jpg']\n",
      "133\n",
      "['antilopini.171.jpg', 'antilopini.156.jpg', 'antilopini.101.jpg', 'antilopini.117.jpg', 'antilopini.48.jpg', 'antilopini.36.jpg', 'antilopini.43.jpg', 'antilopini.180.jpg', 'antilopini.75.jpg', 'antilopini.124.jpg', 'antilopini.136.jpg', 'antilopini.194.jpg', 'antilopini.191.jpg', 'antilopini.95.jpg', 'antilopini.17.jpg', 'antilopini.39.jpg', 'antilopini.172.jpg', 'antilopini.45.jpg', 'antilopini.7.jpg', 'antilopini.54.jpg', 'antilopini.70.jpg', 'antilopini.141.jpg', 'antilopini.122.jpg', 'antilopini.73.jpg', 'antilopini.13.jpg', 'antilopini.142.jpg', 'antilopini.158.jpg', 'antilopini.25.jpg', 'antilopini.188.jpg', 'antilopini.23.jpg', 'antilopini.110.jpg', 'antilopini.46.jpg', 'antilopini.32.jpg', 'antilopini.27.jpg', 'antilopini.64.jpg', 'antilopini.65.jpg', 'antilopini.89.jpg', 'antilopini.29.jpg', 'antilopini.187.jpg', 'antilopini.50.jpg', 'antilopini.134.jpg', 'antilopini.85.jpg', 'antilopini.119.jpg', 'antilopini.189.jpg', 'antilopini.4.jpg', 'antilopini.104.jpg', 'antilopini.68.jpg', 'antilopini.169.jpg', 'antilopini.2.jpg', 'antilopini.86.jpg', 'antilopini.6.jpg', 'antilopini.88.jpg', 'antilopini.106.jpg', 'antilopini.81.jpg', 'antilopini.91.jpg', 'antilopini.82.jpg', 'antilopini.113.jpg', 'antilopini.153.jpg', 'antilopini.148.jpg', 'antilopini.37.jpg', 'antilopini.185.jpg', 'antilopini.26.jpg', 'antilopini.126.jpg', 'antilopini.78.jpg', 'antilopini.59.jpg', 'antilopini.62.jpg', 'antilopini.170.jpg', 'antilopini.181.jpg', 'antilopini.131.jpg', 'antilopini.163.jpg', 'antilopini.114.jpg', 'antilopini.100.jpg', 'antilopini.184.jpg', 'antilopini.30.jpg', 'antilopini.177.jpg', 'antilopini.151.jpg', 'antilopini.129.jpg', 'antilopini.74.jpg', 'antilopini.51.jpg', 'antilopini.192.jpg', 'antilopini.33.jpg', 'antilopini.10.jpg', 'antilopini.108.jpg', 'antilopini.138.jpg', 'antilopini.42.jpg', 'antilopini.5.jpg', 'antilopini.69.jpg', 'antilopini.0.jpg', 'antilopini.28.jpg', 'antilopini.143.jpg', 'antilopini.183.jpg', 'antilopini.159.jpg', 'antilopini.135.jpg', 'antilopini.94.jpg', 'antilopini.102.jpg', 'antilopini.145.jpg', 'antilopini.84.jpg', 'antilopini.144.jpg', 'antilopini.139.jpg', 'antilopini.58.jpg', 'antilopini.152.jpg', 'antilopini.15.jpg', 'antilopini.22.jpg', 'antilopini.66.jpg', 'antilopini.79.jpg', 'antilopini.130.jpg', 'antilopini.173.jpg', 'antilopini.87.jpg', 'antilopini.31.jpg', 'antilopini.155.jpg', 'antilopini.53.jpg', 'antilopini.55.jpg', 'antilopini.165.jpg', 'antilopini.24.jpg', 'antilopini.103.jpg', 'antilopini.21.jpg', 'antilopini.56.jpg', 'antilopini.12.jpg', 'antilopini.132.jpg', 'antilopini.99.jpg', 'antilopini.14.jpg', 'antilopini.178.jpg', 'antilopini.76.jpg', 'antilopini.161.jpg', 'antilopini.47.jpg', 'antilopini.121.jpg', 'antilopini.168.jpg', 'antilopini.98.jpg', 'antilopini.38.jpg', 'antilopini.20.jpg', 'antilopini.18.jpg', 'antilopini.150.jpg', 'antilopini.127.jpg']\n",
      "62\n",
      "['antilopini.182.jpg', 'antilopini.9.jpg', 'antilopini.190.jpg', 'antilopini.105.jpg', 'antilopini.57.jpg', 'antilopini.40.jpg', 'antilopini.128.jpg', 'antilopini.179.jpg', 'antilopini.16.jpg', 'antilopini.120.jpg', 'antilopini.111.jpg', 'antilopini.115.jpg', 'antilopini.140.jpg', 'antilopini.80.jpg', 'antilopini.160.jpg', 'antilopini.93.jpg', 'antilopini.137.jpg', 'antilopini.164.jpg', 'antilopini.49.jpg', 'antilopini.162.jpg', 'antilopini.60.jpg', 'antilopini.1.jpg', 'antilopini.149.jpg', 'antilopini.175.jpg', 'antilopini.96.jpg', 'antilopini.157.jpg', 'antilopini.112.jpg', 'antilopini.61.jpg', 'antilopini.166.jpg', 'antilopini.34.jpg', 'antilopini.176.jpg', 'antilopini.77.jpg', 'antilopini.44.jpg', 'antilopini.116.jpg', 'antilopini.67.jpg', 'antilopini.72.jpg', 'antilopini.174.jpg', 'antilopini.97.jpg', 'antilopini.90.jpg', 'antilopini.154.jpg', 'antilopini.35.jpg', 'antilopini.107.jpg', 'antilopini.11.jpg', 'antilopini.92.jpg', 'antilopini.63.jpg', 'antilopini.19.jpg', 'antilopini.83.jpg', 'antilopini.186.jpg', 'antilopini.133.jpg', 'antilopini.193.jpg', 'antilopini.41.jpg', 'antilopini.167.jpg', 'antilopini.71.jpg', 'antilopini.125.jpg', 'antilopini.118.jpg', 'antilopini.52.jpg', 'antilopini.3.jpg', 'antilopini.147.jpg', 'antilopini.123.jpg', 'antilopini.109.jpg', 'antilopini.8.jpg', 'antilopini.146.jpg']\n",
      "364\n",
      "['hippotragini.63.jpg', 'hippotragini.52.jpg', 'hippotragini.116.jpg', 'hippotragini.340.jpg', 'hippotragini.390.jpg', 'hippotragini.14.jpg', 'hippotragini.333.jpg', 'hippotragini.26.jpg', 'hippotragini.129.jpg', 'hippotragini.411.jpg', 'hippotragini.370.jpg', 'hippotragini.6.jpg', 'hippotragini.58.jpg', 'hippotragini.415.jpg', 'hippotragini.437.jpg', 'hippotragini.34.jpg', 'hippotragini.104.jpg', 'hippotragini.443.jpg', 'hippotragini.388.jpg', 'hippotragini.46.jpg', 'hippotragini.193.jpg', 'hippotragini.417.jpg', 'hippotragini.300.jpg', 'hippotragini.0.jpg', 'hippotragini.119.jpg', 'hippotragini.70.jpg', 'hippotragini.481.jpg', 'hippotragini.375.jpg', 'hippotragini.67.jpg', 'hippotragini.17.jpg', 'hippotragini.252.jpg', 'hippotragini.366.jpg', 'hippotragini.331.jpg', 'hippotragini.105.jpg', 'hippotragini.235.jpg', 'hippotragini.265.jpg', 'hippotragini.8.jpg', 'hippotragini.171.jpg', 'hippotragini.405.jpg', 'hippotragini.262.jpg', 'hippotragini.94.jpg', 'hippotragini.257.jpg', 'hippotragini.464.jpg', 'hippotragini.246.jpg', 'hippotragini.282.jpg', 'hippotragini.11.jpg', 'hippotragini.149.jpg', 'hippotragini.64.jpg', 'hippotragini.436.jpg', 'hippotragini.249.jpg', 'hippotragini.394.jpg', 'hippotragini.75.jpg', 'hippotragini.128.jpg', 'hippotragini.213.jpg', 'hippotragini.414.jpg', 'hippotragini.347.jpg', 'hippotragini.276.jpg', 'hippotragini.342.jpg', 'hippotragini.369.jpg', 'hippotragini.450.jpg', 'hippotragini.206.jpg', 'hippotragini.339.jpg', 'hippotragini.512.jpg', 'hippotragini.438.jpg', 'hippotragini.27.jpg', 'hippotragini.318.jpg', 'hippotragini.392.jpg', 'hippotragini.447.jpg', 'hippotragini.313.jpg', 'hippotragini.377.jpg', 'hippotragini.29.jpg', 'hippotragini.200.jpg', 'hippotragini.111.jpg', 'hippotragini.350.jpg', 'hippotragini.356.jpg', 'hippotragini.335.jpg', 'hippotragini.31.jpg', 'hippotragini.343.jpg', 'hippotragini.60.jpg', 'hippotragini.404.jpg', 'hippotragini.66.jpg', 'hippotragini.172.jpg', 'hippotragini.506.jpg', 'hippotragini.471.jpg', 'hippotragini.159.jpg', 'hippotragini.279.jpg', 'hippotragini.382.jpg', 'hippotragini.162.jpg', 'hippotragini.260.jpg', 'hippotragini.173.jpg', 'hippotragini.462.jpg', 'hippotragini.180.jpg', 'hippotragini.428.jpg', 'hippotragini.292.jpg', 'hippotragini.161.jpg', 'hippotragini.477.jpg', 'hippotragini.65.jpg', 'hippotragini.19.jpg', 'hippotragini.53.jpg', 'hippotragini.380.jpg', 'hippotragini.74.jpg', 'hippotragini.362.jpg', 'hippotragini.324.jpg', 'hippotragini.434.jpg', 'hippotragini.204.jpg', 'hippotragini.514.jpg', 'hippotragini.283.jpg', 'hippotragini.285.jpg', 'hippotragini.457.jpg', 'hippotragini.194.jpg', 'hippotragini.373.jpg', 'hippotragini.20.jpg', 'hippotragini.62.jpg', 'hippotragini.496.jpg', 'hippotragini.118.jpg', 'hippotragini.484.jpg', 'hippotragini.182.jpg', 'hippotragini.449.jpg', 'hippotragini.422.jpg', 'hippotragini.430.jpg', 'hippotragini.353.jpg', 'hippotragini.5.jpg', 'hippotragini.197.jpg', 'hippotragini.325.jpg', 'hippotragini.507.jpg', 'hippotragini.480.jpg', 'hippotragini.208.jpg', 'hippotragini.287.jpg', 'hippotragini.346.jpg', 'hippotragini.416.jpg', 'hippotragini.135.jpg', 'hippotragini.429.jpg', 'hippotragini.79.jpg', 'hippotragini.170.jpg', 'hippotragini.261.jpg', 'hippotragini.183.jpg', 'hippotragini.96.jpg', 'hippotragini.92.jpg', 'hippotragini.109.jpg', 'hippotragini.452.jpg', 'hippotragini.455.jpg', 'hippotragini.10.jpg', 'hippotragini.39.jpg', 'hippotragini.110.jpg', 'hippotragini.210.jpg', 'hippotragini.201.jpg', 'hippotragini.433.jpg', 'hippotragini.117.jpg', 'hippotragini.131.jpg', 'hippotragini.143.jpg', 'hippotragini.87.jpg', 'hippotragini.108.jpg', 'hippotragini.401.jpg', 'hippotragini.44.jpg', 'hippotragini.158.jpg', 'hippotragini.115.jpg', 'hippotragini.251.jpg', 'hippotragini.472.jpg', 'hippotragini.113.jpg', 'hippotragini.37.jpg', 'hippotragini.517.jpg', 'hippotragini.519.jpg', 'hippotragini.476.jpg', 'hippotragini.358.jpg', 'hippotragini.361.jpg', 'hippotragini.391.jpg', 'hippotragini.403.jpg', 'hippotragini.271.jpg', 'hippotragini.137.jpg', 'hippotragini.7.jpg', 'hippotragini.42.jpg', 'hippotragini.88.jpg', 'hippotragini.363.jpg', 'hippotragini.30.jpg', 'hippotragini.297.jpg', 'hippotragini.352.jpg', 'hippotragini.389.jpg', 'hippotragini.153.jpg', 'hippotragini.188.jpg', 'hippotragini.219.jpg', 'hippotragini.243.jpg', 'hippotragini.220.jpg', 'hippotragini.9.jpg', 'hippotragini.288.jpg', 'hippotragini.312.jpg', 'hippotragini.402.jpg', 'hippotragini.329.jpg', 'hippotragini.317.jpg', 'hippotragini.349.jpg', 'hippotragini.239.jpg', 'hippotragini.133.jpg', 'hippotragini.48.jpg', 'hippotragini.147.jpg', 'hippotragini.86.jpg', 'hippotragini.51.jpg', 'hippotragini.321.jpg', 'hippotragini.258.jpg', 'hippotragini.354.jpg', 'hippotragini.112.jpg', 'hippotragini.306.jpg', 'hippotragini.242.jpg', 'hippotragini.293.jpg', 'hippotragini.372.jpg', 'hippotragini.420.jpg', 'hippotragini.190.jpg', 'hippotragini.493.jpg', 'hippotragini.56.jpg', 'hippotragini.13.jpg', 'hippotragini.202.jpg', 'hippotragini.142.jpg', 'hippotragini.24.jpg', 'hippotragini.227.jpg', 'hippotragini.291.jpg', 'hippotragini.410.jpg', 'hippotragini.379.jpg', 'hippotragini.468.jpg', 'hippotragini.303.jpg', 'hippotragini.95.jpg', 'hippotragini.156.jpg', 'hippotragini.101.jpg', 'hippotragini.189.jpg', 'hippotragini.504.jpg', 'hippotragini.82.jpg', 'hippotragini.453.jpg', 'hippotragini.309.jpg', 'hippotragini.315.jpg', 'hippotragini.4.jpg', 'hippotragini.326.jpg', 'hippotragini.214.jpg', 'hippotragini.466.jpg', 'hippotragini.359.jpg', 'hippotragini.152.jpg', 'hippotragini.322.jpg', 'hippotragini.328.jpg', 'hippotragini.241.jpg', 'hippotragini.355.jpg', 'hippotragini.407.jpg', 'hippotragini.43.jpg', 'hippotragini.203.jpg', 'hippotragini.269.jpg', 'hippotragini.103.jpg', 'hippotragini.304.jpg', 'hippotragini.320.jpg', 'hippotragini.383.jpg', 'hippotragini.270.jpg', 'hippotragini.138.jpg', 'hippotragini.176.jpg', 'hippotragini.21.jpg', 'hippotragini.357.jpg', 'hippotragini.264.jpg', 'hippotragini.446.jpg', 'hippotragini.295.jpg', 'hippotragini.399.jpg', 'hippotragini.231.jpg', 'hippotragini.378.jpg', 'hippotragini.141.jpg', 'hippotragini.272.jpg', 'hippotragini.174.jpg', 'hippotragini.425.jpg', 'hippotragini.384.jpg', 'hippotragini.386.jpg', 'hippotragini.263.jpg', 'hippotragini.371.jpg', 'hippotragini.259.jpg', 'hippotragini.150.jpg', 'hippotragini.238.jpg', 'hippotragini.144.jpg', 'hippotragini.296.jpg', 'hippotragini.280.jpg', 'hippotragini.408.jpg', 'hippotragini.302.jpg', 'hippotragini.130.jpg', 'hippotragini.360.jpg', 'hippotragini.28.jpg', 'hippotragini.461.jpg', 'hippotragini.289.jpg', 'hippotragini.511.jpg', 'hippotragini.102.jpg', 'hippotragini.495.jpg', 'hippotragini.209.jpg', 'hippotragini.217.jpg', 'hippotragini.107.jpg', 'hippotragini.3.jpg', 'hippotragini.323.jpg', 'hippotragini.186.jpg', 'hippotragini.409.jpg', 'hippotragini.319.jpg', 'hippotragini.513.jpg', 'hippotragini.385.jpg', 'hippotragini.330.jpg', 'hippotragini.327.jpg', 'hippotragini.237.jpg', 'hippotragini.157.jpg', 'hippotragini.426.jpg', 'hippotragini.106.jpg', 'hippotragini.218.jpg', 'hippotragini.470.jpg', 'hippotragini.387.jpg', 'hippotragini.93.jpg', 'hippotragini.367.jpg', 'hippotragini.98.jpg', 'hippotragini.365.jpg', 'hippotragini.502.jpg', 'hippotragini.72.jpg', 'hippotragini.244.jpg', 'hippotragini.83.jpg', 'hippotragini.146.jpg', 'hippotragini.54.jpg', 'hippotragini.460.jpg', 'hippotragini.305.jpg', 'hippotragini.23.jpg', 'hippotragini.45.jpg', 'hippotragini.148.jpg', 'hippotragini.126.jpg', 'hippotragini.396.jpg', 'hippotragini.151.jpg', 'hippotragini.59.jpg', 'hippotragini.12.jpg', 'hippotragini.400.jpg', 'hippotragini.294.jpg', 'hippotragini.301.jpg', 'hippotragini.100.jpg', 'hippotragini.444.jpg', 'hippotragini.492.jpg', 'hippotragini.165.jpg', 'hippotragini.121.jpg', 'hippotragini.78.jpg', 'hippotragini.412.jpg', 'hippotragini.374.jpg', 'hippotragini.168.jpg', 'hippotragini.216.jpg', 'hippotragini.337.jpg', 'hippotragini.132.jpg', 'hippotragini.175.jpg', 'hippotragini.441.jpg', 'hippotragini.451.jpg', 'hippotragini.458.jpg', 'hippotragini.234.jpg', 'hippotragini.498.jpg', 'hippotragini.248.jpg', 'hippotragini.232.jpg', 'hippotragini.311.jpg', 'hippotragini.55.jpg', 'hippotragini.77.jpg', 'hippotragini.47.jpg', 'hippotragini.179.jpg', 'hippotragini.25.jpg', 'hippotragini.456.jpg', 'hippotragini.467.jpg', 'hippotragini.224.jpg', 'hippotragini.1.jpg', 'hippotragini.445.jpg', 'hippotragini.419.jpg', 'hippotragini.50.jpg', 'hippotragini.478.jpg', 'hippotragini.286.jpg', 'hippotragini.406.jpg', 'hippotragini.368.jpg', 'hippotragini.198.jpg', 'hippotragini.275.jpg', 'hippotragini.421.jpg', 'hippotragini.454.jpg', 'hippotragini.277.jpg', 'hippotragini.518.jpg']\n",
      "157\n",
      "['hippotragini.69.jpg', 'hippotragini.205.jpg', 'hippotragini.236.jpg', 'hippotragini.491.jpg', 'hippotragini.509.jpg', 'hippotragini.424.jpg', 'hippotragini.32.jpg', 'hippotragini.255.jpg', 'hippotragini.497.jpg', 'hippotragini.247.jpg', 'hippotragini.510.jpg', 'hippotragini.139.jpg', 'hippotragini.268.jpg', 'hippotragini.376.jpg', 'hippotragini.123.jpg', 'hippotragini.344.jpg', 'hippotragini.253.jpg', 'hippotragini.199.jpg', 'hippotragini.81.jpg', 'hippotragini.474.jpg', 'hippotragini.207.jpg', 'hippotragini.229.jpg', 'hippotragini.490.jpg', 'hippotragini.40.jpg', 'hippotragini.124.jpg', 'hippotragini.163.jpg', 'hippotragini.169.jpg', 'hippotragini.475.jpg', 'hippotragini.364.jpg', 'hippotragini.278.jpg', 'hippotragini.515.jpg', 'hippotragini.448.jpg', 'hippotragini.222.jpg', 'hippotragini.508.jpg', 'hippotragini.177.jpg', 'hippotragini.427.jpg', 'hippotragini.245.jpg', 'hippotragini.90.jpg', 'hippotragini.398.jpg', 'hippotragini.488.jpg', 'hippotragini.332.jpg', 'hippotragini.485.jpg', 'hippotragini.84.jpg', 'hippotragini.442.jpg', 'hippotragini.482.jpg', 'hippotragini.136.jpg', 'hippotragini.61.jpg', 'hippotragini.91.jpg', 'hippotragini.267.jpg', 'hippotragini.316.jpg', 'hippotragini.73.jpg', 'hippotragini.140.jpg', 'hippotragini.348.jpg', 'hippotragini.125.jpg', 'hippotragini.228.jpg', 'hippotragini.212.jpg', 'hippotragini.221.jpg', 'hippotragini.178.jpg', 'hippotragini.97.jpg', 'hippotragini.413.jpg', 'hippotragini.85.jpg', 'hippotragini.226.jpg', 'hippotragini.49.jpg', 'hippotragini.469.jpg', 'hippotragini.397.jpg', 'hippotragini.57.jpg', 'hippotragini.435.jpg', 'hippotragini.307.jpg', 'hippotragini.191.jpg', 'hippotragini.290.jpg', 'hippotragini.196.jpg', 'hippotragini.76.jpg', 'hippotragini.41.jpg', 'hippotragini.273.jpg', 'hippotragini.36.jpg', 'hippotragini.336.jpg', 'hippotragini.310.jpg', 'hippotragini.418.jpg', 'hippotragini.154.jpg', 'hippotragini.254.jpg', 'hippotragini.16.jpg', 'hippotragini.18.jpg', 'hippotragini.463.jpg', 'hippotragini.516.jpg', 'hippotragini.114.jpg', 'hippotragini.431.jpg', 'hippotragini.80.jpg', 'hippotragini.256.jpg', 'hippotragini.432.jpg', 'hippotragini.166.jpg', 'hippotragini.299.jpg', 'hippotragini.334.jpg', 'hippotragini.520.jpg', 'hippotragini.240.jpg', 'hippotragini.223.jpg', 'hippotragini.230.jpg', 'hippotragini.281.jpg', 'hippotragini.341.jpg', 'hippotragini.160.jpg', 'hippotragini.479.jpg', 'hippotragini.459.jpg', 'hippotragini.395.jpg', 'hippotragini.187.jpg', 'hippotragini.274.jpg', 'hippotragini.486.jpg', 'hippotragini.465.jpg', 'hippotragini.99.jpg', 'hippotragini.483.jpg', 'hippotragini.120.jpg', 'hippotragini.2.jpg', 'hippotragini.298.jpg', 'hippotragini.501.jpg', 'hippotragini.192.jpg', 'hippotragini.314.jpg', 'hippotragini.225.jpg', 'hippotragini.122.jpg', 'hippotragini.499.jpg', 'hippotragini.393.jpg', 'hippotragini.489.jpg', 'hippotragini.68.jpg', 'hippotragini.185.jpg', 'hippotragini.338.jpg', 'hippotragini.155.jpg', 'hippotragini.351.jpg', 'hippotragini.89.jpg', 'hippotragini.233.jpg', 'hippotragini.134.jpg', 'hippotragini.345.jpg', 'hippotragini.423.jpg', 'hippotragini.145.jpg', 'hippotragini.500.jpg', 'hippotragini.195.jpg', 'hippotragini.181.jpg', 'hippotragini.308.jpg', 'hippotragini.71.jpg', 'hippotragini.440.jpg', 'hippotragini.215.jpg', 'hippotragini.22.jpg', 'hippotragini.184.jpg', 'hippotragini.381.jpg', 'hippotragini.505.jpg', 'hippotragini.487.jpg', 'hippotragini.127.jpg', 'hippotragini.38.jpg', 'hippotragini.167.jpg', 'hippotragini.250.jpg', 'hippotragini.266.jpg', 'hippotragini.35.jpg', 'hippotragini.164.jpg', 'hippotragini.284.jpg', 'hippotragini.503.jpg', 'hippotragini.473.jpg', 'hippotragini.211.jpg', 'hippotragini.15.jpg', 'hippotragini.494.jpg', 'hippotragini.439.jpg', 'hippotragini.33.jpg']\n",
      "462\n",
      "['reduncini.282.jpg', 'reduncini.127.jpg', 'reduncini.34.jpg', 'reduncini.41.jpg', 'reduncini.436.jpg', 'reduncini.145.jpg', 'reduncini.104.jpg', 'reduncini.420.jpg', 'reduncini.190.jpg', 'reduncini.10.jpg', 'reduncini.9.jpg', 'reduncini.183.jpg', 'reduncini.370.jpg', 'reduncini.485.jpg', 'reduncini.271.jpg', 'reduncini.70.jpg', 'reduncini.622.jpg', 'reduncini.409.jpg', 'reduncini.412.jpg', 'reduncini.543.jpg', 'reduncini.249.jpg', 'reduncini.555.jpg', 'reduncini.536.jpg', 'reduncini.230.jpg', 'reduncini.440.jpg', 'reduncini.354.jpg', 'reduncini.270.jpg', 'reduncini.56.jpg', 'reduncini.526.jpg', 'reduncini.258.jpg', 'reduncini.264.jpg', 'reduncini.576.jpg', 'reduncini.260.jpg', 'reduncini.11.jpg', 'reduncini.69.jpg', 'reduncini.138.jpg', 'reduncini.29.jpg', 'reduncini.362.jpg', 'reduncini.366.jpg', 'reduncini.131.jpg', 'reduncini.252.jpg', 'reduncini.416.jpg', 'reduncini.132.jpg', 'reduncini.640.jpg', 'reduncini.504.jpg', 'reduncini.188.jpg', 'reduncini.540.jpg', 'reduncini.129.jpg', 'reduncini.478.jpg', 'reduncini.571.jpg', 'reduncini.531.jpg', 'reduncini.601.jpg', 'reduncini.563.jpg', 'reduncini.193.jpg', 'reduncini.50.jpg', 'reduncini.208.jpg', 'reduncini.391.jpg', 'reduncini.315.jpg', 'reduncini.92.jpg', 'reduncini.76.jpg', 'reduncini.510.jpg', 'reduncini.579.jpg', 'reduncini.493.jpg', 'reduncini.266.jpg', 'reduncini.225.jpg', 'reduncini.118.jpg', 'reduncini.506.jpg', 'reduncini.659.jpg', 'reduncini.519.jpg', 'reduncini.161.jpg', 'reduncini.657.jpg', 'reduncini.143.jpg', 'reduncini.345.jpg', 'reduncini.560.jpg', 'reduncini.113.jpg', 'reduncini.476.jpg', 'reduncini.337.jpg', 'reduncini.275.jpg', 'reduncini.297.jpg', 'reduncini.75.jpg', 'reduncini.479.jpg', 'reduncini.565.jpg', 'reduncini.306.jpg', 'reduncini.254.jpg', 'reduncini.365.jpg', 'reduncini.194.jpg', 'reduncini.277.jpg', 'reduncini.527.jpg', 'reduncini.57.jpg', 'reduncini.442.jpg', 'reduncini.119.jpg', 'reduncini.609.jpg', 'reduncini.105.jpg', 'reduncini.488.jpg', 'reduncini.328.jpg', 'reduncini.22.jpg', 'reduncini.564.jpg', 'reduncini.438.jpg', 'reduncini.38.jpg', 'reduncini.61.jpg', 'reduncini.172.jpg', 'reduncini.240.jpg', 'reduncini.223.jpg', 'reduncini.128.jpg', 'reduncini.592.jpg', 'reduncini.140.jpg', 'reduncini.206.jpg', 'reduncini.53.jpg', 'reduncini.570.jpg', 'reduncini.574.jpg', 'reduncini.201.jpg', 'reduncini.578.jpg', 'reduncini.124.jpg', 'reduncini.235.jpg', 'reduncini.348.jpg', 'reduncini.68.jpg', 'reduncini.253.jpg', 'reduncini.597.jpg', 'reduncini.120.jpg', 'reduncini.648.jpg', 'reduncini.577.jpg', 'reduncini.559.jpg', 'reduncini.243.jpg', 'reduncini.196.jpg', 'reduncini.614.jpg', 'reduncini.65.jpg', 'reduncini.356.jpg', 'reduncini.109.jpg', 'reduncini.529.jpg', 'reduncini.0.jpg', 'reduncini.556.jpg', 'reduncini.214.jpg', 'reduncini.487.jpg', 'reduncini.285.jpg', 'reduncini.619.jpg', 'reduncini.404.jpg', 'reduncini.403.jpg', 'reduncini.20.jpg', 'reduncini.71.jpg', 'reduncini.272.jpg', 'reduncini.320.jpg', 'reduncini.407.jpg', 'reduncini.483.jpg', 'reduncini.171.jpg', 'reduncini.610.jpg', 'reduncini.67.jpg', 'reduncini.651.jpg', 'reduncini.334.jpg', 'reduncini.465.jpg', 'reduncini.125.jpg', 'reduncini.376.jpg', 'reduncini.514.jpg', 'reduncini.204.jpg', 'reduncini.47.jpg', 'reduncini.85.jpg', 'reduncini.116.jpg', 'reduncini.117.jpg', 'reduncini.486.jpg', 'reduncini.96.jpg', 'reduncini.13.jpg', 'reduncini.287.jpg', 'reduncini.313.jpg', 'reduncini.197.jpg', 'reduncini.575.jpg', 'reduncini.210.jpg', 'reduncini.46.jpg', 'reduncini.524.jpg', 'reduncini.382.jpg', 'reduncini.381.jpg', 'reduncini.269.jpg', 'reduncini.554.jpg', 'reduncini.621.jpg', 'reduncini.14.jpg', 'reduncini.655.jpg', 'reduncini.31.jpg', 'reduncini.1.jpg', 'reduncini.189.jpg', 'reduncini.7.jpg', 'reduncini.396.jpg', 'reduncini.518.jpg', 'reduncini.152.jpg', 'reduncini.377.jpg', 'reduncini.541.jpg', 'reduncini.360.jpg', 'reduncini.324.jpg', 'reduncini.299.jpg', 'reduncini.63.jpg', 'reduncini.279.jpg', 'reduncini.515.jpg', 'reduncini.602.jpg', 'reduncini.52.jpg', 'reduncini.256.jpg', 'reduncini.43.jpg', 'reduncini.220.jpg', 'reduncini.607.jpg', 'reduncini.558.jpg', 'reduncini.91.jpg', 'reduncini.522.jpg', 'reduncini.489.jpg', 'reduncini.317.jpg', 'reduncini.341.jpg', 'reduncini.110.jpg', 'reduncini.615.jpg', 'reduncini.624.jpg', 'reduncini.347.jpg', 'reduncini.595.jpg', 'reduncini.263.jpg', 'reduncini.6.jpg', 'reduncini.135.jpg', 'reduncini.521.jpg', 'reduncini.283.jpg', 'reduncini.257.jpg', 'reduncini.17.jpg', 'reduncini.319.jpg', 'reduncini.599.jpg', 'reduncini.55.jpg', 'reduncini.149.jpg', 'reduncini.426.jpg', 'reduncini.147.jpg', 'reduncini.242.jpg', 'reduncini.236.jpg', 'reduncini.429.jpg', 'reduncini.250.jpg', 'reduncini.477.jpg', 'reduncini.338.jpg', 'reduncini.58.jpg', 'reduncini.177.jpg', 'reduncini.352.jpg', 'reduncini.344.jpg', 'reduncini.523.jpg', 'reduncini.545.jpg', 'reduncini.434.jpg', 'reduncini.499.jpg', 'reduncini.246.jpg', 'reduncini.62.jpg', 'reduncini.525.jpg', 'reduncini.509.jpg', 'reduncini.158.jpg', 'reduncini.133.jpg', 'reduncini.232.jpg', 'reduncini.213.jpg', 'reduncini.551.jpg', 'reduncini.480.jpg', 'reduncini.394.jpg', 'reduncini.428.jpg', 'reduncini.330.jpg', 'reduncini.583.jpg', 'reduncini.311.jpg', 'reduncini.185.jpg', 'reduncini.79.jpg', 'reduncini.163.jpg', 'reduncini.550.jpg', 'reduncini.108.jpg', 'reduncini.539.jpg', 'reduncini.405.jpg', 'reduncini.325.jpg', 'reduncini.553.jpg', 'reduncini.359.jpg', 'reduncini.346.jpg', 'reduncini.314.jpg', 'reduncini.389.jpg', 'reduncini.280.jpg', 'reduncini.88.jpg', 'reduncini.19.jpg', 'reduncini.573.jpg', 'reduncini.239.jpg', 'reduncini.589.jpg', 'reduncini.361.jpg', 'reduncini.475.jpg', 'reduncini.582.jpg', 'reduncini.298.jpg', 'reduncini.323.jpg', 'reduncini.39.jpg', 'reduncini.638.jpg', 'reduncini.202.jpg', 'reduncini.474.jpg', 'reduncini.154.jpg', 'reduncini.293.jpg', 'reduncini.538.jpg', 'reduncini.528.jpg', 'reduncini.90.jpg', 'reduncini.567.jpg', 'reduncini.114.jpg', 'reduncini.159.jpg', 'reduncini.322.jpg', 'reduncini.26.jpg', 'reduncini.568.jpg', 'reduncini.192.jpg', 'reduncini.373.jpg', 'reduncini.417.jpg', 'reduncini.219.jpg', 'reduncini.505.jpg', 'reduncini.342.jpg', 'reduncini.641.jpg', 'reduncini.21.jpg', 'reduncini.78.jpg', 'reduncini.221.jpg', 'reduncini.459.jpg', 'reduncini.495.jpg', 'reduncini.198.jpg', 'reduncini.234.jpg', 'reduncini.262.jpg', 'reduncini.286.jpg', 'reduncini.175.jpg', 'reduncini.629.jpg', 'reduncini.181.jpg', 'reduncini.89.jpg', 'reduncini.401.jpg', 'reduncini.231.jpg', 'reduncini.623.jpg', 'reduncini.227.jpg', 'reduncini.74.jpg', 'reduncini.30.jpg', 'reduncini.318.jpg', 'reduncini.295.jpg', 'reduncini.349.jpg', 'reduncini.331.jpg', 'reduncini.421.jpg', 'reduncini.398.jpg', 'reduncini.261.jpg', 'reduncini.274.jpg', 'reduncini.658.jpg', 'reduncini.84.jpg', 'reduncini.176.jpg', 'reduncini.364.jpg', 'reduncini.60.jpg', 'reduncini.80.jpg', 'reduncini.87.jpg', 'reduncini.326.jpg', 'reduncini.307.jpg', 'reduncini.166.jpg', 'reduncini.444.jpg', 'reduncini.386.jpg', 'reduncini.289.jpg', 'reduncini.18.jpg', 'reduncini.25.jpg', 'reduncini.296.jpg', 'reduncini.512.jpg', 'reduncini.24.jpg', 'reduncini.372.jpg', 'reduncini.379.jpg', 'reduncini.530.jpg', 'reduncini.97.jpg', 'reduncini.500.jpg', 'reduncini.173.jpg', 'reduncini.103.jpg', 'reduncini.200.jpg', 'reduncini.618.jpg', 'reduncini.303.jpg', 'reduncini.224.jpg', 'reduncini.292.jpg', 'reduncini.605.jpg', 'reduncini.612.jpg', 'reduncini.215.jpg', 'reduncini.385.jpg', 'reduncini.291.jpg', 'reduncini.112.jpg', 'reduncini.27.jpg', 'reduncini.663.jpg', 'reduncini.48.jpg', 'reduncini.517.jpg', 'reduncini.411.jpg', 'reduncini.123.jpg', 'reduncini.95.jpg', 'reduncini.620.jpg', 'reduncini.542.jpg', 'reduncini.191.jpg', 'reduncini.639.jpg', 'reduncini.203.jpg', 'reduncini.603.jpg', 'reduncini.653.jpg', 'reduncini.427.jpg', 'reduncini.167.jpg', 'reduncini.502.jpg', 'reduncini.8.jpg', 'reduncini.156.jpg', 'reduncini.375.jpg', 'reduncini.470.jpg', 'reduncini.662.jpg', 'reduncini.288.jpg', 'reduncini.387.jpg', 'reduncini.212.jpg', 'reduncini.600.jpg', 'reduncini.86.jpg', 'reduncini.468.jpg', 'reduncini.448.jpg', 'reduncini.187.jpg', 'reduncini.368.jpg', 'reduncini.276.jpg', 'reduncini.353.jpg', 'reduncini.42.jpg', 'reduncini.497.jpg', 'reduncini.300.jpg', 'reduncini.656.jpg', 'reduncini.228.jpg', 'reduncini.552.jpg', 'reduncini.141.jpg', 'reduncini.633.jpg', 'reduncini.419.jpg', 'reduncini.174.jpg', 'reduncini.561.jpg', 'reduncini.226.jpg', 'reduncini.207.jpg', 'reduncini.134.jpg', 'reduncini.406.jpg', 'reduncini.647.jpg', 'reduncini.259.jpg', 'reduncini.150.jpg', 'reduncini.535.jpg', 'reduncini.238.jpg', 'reduncini.144.jpg', 'reduncini.593.jpg', 'reduncini.490.jpg', 'reduncini.462.jpg', 'reduncini.388.jpg', 'reduncini.432.jpg', 'reduncini.233.jpg', 'reduncini.471.jpg', 'reduncini.130.jpg', 'reduncini.572.jpg', 'reduncini.28.jpg', 'reduncini.484.jpg', 'reduncini.408.jpg', 'reduncini.447.jpg', 'reduncini.395.jpg', 'reduncini.652.jpg', 'reduncini.102.jpg', 'reduncini.333.jpg', 'reduncini.415.jpg', 'reduncini.587.jpg', 'reduncini.209.jpg', 'reduncini.312.jpg', 'reduncini.217.jpg', 'reduncini.107.jpg', 'reduncini.3.jpg', 'reduncini.437.jpg', 'reduncini.400.jpg', 'reduncini.498.jpg', 'reduncini.548.jpg', 'reduncini.186.jpg', 'reduncini.482.jpg', 'reduncini.632.jpg', 'reduncini.460.jpg', 'reduncini.654.jpg', 'reduncini.453.jpg', 'reduncini.340.jpg', 'reduncini.566.jpg', 'reduncini.216.jpg', 'reduncini.646.jpg', 'reduncini.267.jpg', 'reduncini.423.jpg', 'reduncini.569.jpg', 'reduncini.627.jpg', 'reduncini.380.jpg', 'reduncini.441.jpg', 'reduncini.237.jpg', 'reduncini.454.jpg', 'reduncini.547.jpg', 'reduncini.350.jpg', 'reduncini.49.jpg', 'reduncini.106.jpg', 'reduncini.218.jpg']\n",
      "202\n",
      "['reduncini.99.jpg', 'reduncini.302.jpg', 'reduncini.40.jpg', 'reduncini.93.jpg', 'reduncini.179.jpg', 'reduncini.590.jpg', 'reduncini.402.jpg', 'reduncini.205.jpg', 'reduncini.304.jpg', 'reduncini.184.jpg', 'reduncini.72.jpg', 'reduncini.604.jpg', 'reduncini.343.jpg', 'reduncini.83.jpg', 'reduncini.594.jpg', 'reduncini.418.jpg', 'reduncini.54.jpg', 'reduncini.392.jpg', 'reduncini.581.jpg', 'reduncini.631.jpg', 'reduncini.305.jpg', 'reduncini.23.jpg', 'reduncini.626.jpg', 'reduncini.455.jpg', 'reduncini.148.jpg', 'reduncini.367.jpg', 'reduncini.126.jpg', 'reduncini.661.jpg', 'reduncini.435.jpg', 'reduncini.222.jpg', 'reduncini.151.jpg', 'reduncini.492.jpg', 'reduncini.59.jpg', 'reduncini.413.jpg', 'reduncini.12.jpg', 'reduncini.642.jpg', 'reduncini.616.jpg', 'reduncini.584.jpg', 'reduncini.294.jpg', 'reduncini.301.jpg', 'reduncini.463.jpg', 'reduncini.329.jpg', 'reduncini.100.jpg', 'reduncini.516.jpg', 'reduncini.16.jpg', 'reduncini.316.jpg', 'reduncini.165.jpg', 'reduncini.121.jpg', 'reduncini.378.jpg', 'reduncini.157.jpg', 'reduncini.336.jpg', 'reduncini.433.jpg', 'reduncini.520.jpg', 'reduncini.265.jpg', 'reduncini.351.jpg', 'reduncini.457.jpg', 'reduncini.608.jpg', 'reduncini.613.jpg', 'reduncini.469.jpg', 'reduncini.643.jpg', 'reduncini.496.jpg', 'reduncini.464.jpg', 'reduncini.111.jpg', 'reduncini.155.jpg', 'reduncini.94.jpg', 'reduncini.358.jpg', 'reduncini.51.jpg', 'reduncini.611.jpg', 'reduncini.449.jpg', 'reduncini.2.jpg', 'reduncini.36.jpg', 'reduncini.425.jpg', 'reduncini.101.jpg', 'reduncini.451.jpg', 'reduncini.169.jpg', 'reduncini.544.jpg', 'reduncini.397.jpg', 'reduncini.586.jpg', 'reduncini.644.jpg', 'reduncini.139.jpg', 'reduncini.410.jpg', 'reduncini.472.jpg', 'reduncini.650.jpg', 'reduncini.588.jpg', 'reduncini.64.jpg', 'reduncini.511.jpg', 'reduncini.660.jpg', 'reduncini.532.jpg', 'reduncini.278.jpg', 'reduncini.537.jpg', 'reduncini.247.jpg', 'reduncini.507.jpg', 'reduncini.399.jpg', 'reduncini.162.jpg', 'reduncini.414.jpg', 'reduncini.458.jpg', 'reduncini.637.jpg', 'reduncini.81.jpg', 'reduncini.248.jpg', 'reduncini.327.jpg', 'reduncini.339.jpg', 'reduncini.44.jpg', 'reduncini.557.jpg', 'reduncini.5.jpg', 'reduncini.606.jpg', 'reduncini.445.jpg', 'reduncini.649.jpg', 'reduncini.355.jpg', 'reduncini.491.jpg', 'reduncini.180.jpg', 'reduncini.635.jpg', 'reduncini.168.jpg', 'reduncini.309.jpg', 'reduncini.466.jpg', 'reduncini.273.jpg', 'reduncini.122.jpg', 'reduncini.182.jpg', 'reduncini.534.jpg', 'reduncini.146.jpg', 'reduncini.281.jpg', 'reduncini.251.jpg', 'reduncini.456.jpg', 'reduncini.424.jpg', 'reduncini.443.jpg', 'reduncini.357.jpg', 'reduncini.195.jpg', 'reduncini.170.jpg', 'reduncini.452.jpg', 'reduncini.98.jpg', 'reduncini.115.jpg', 'reduncini.625.jpg', 'reduncini.383.jpg', 'reduncini.580.jpg', 'reduncini.393.jpg', 'reduncini.153.jpg', 'reduncini.82.jpg', 'reduncini.546.jpg', 'reduncini.73.jpg', 'reduncini.308.jpg', 'reduncini.508.jpg', 'reduncini.32.jpg', 'reduncini.37.jpg', 'reduncini.244.jpg', 'reduncini.422.jpg', 'reduncini.229.jpg', 'reduncini.160.jpg', 'reduncini.513.jpg', 'reduncini.332.jpg', 'reduncini.598.jpg', 'reduncini.66.jpg', 'reduncini.481.jpg', 'reduncini.446.jpg', 'reduncini.461.jpg', 'reduncini.562.jpg', 'reduncini.321.jpg', 'reduncini.630.jpg', 'reduncini.374.jpg', 'reduncini.549.jpg', 'reduncini.634.jpg', 'reduncini.199.jpg', 'reduncini.137.jpg', 'reduncini.241.jpg', 'reduncini.4.jpg', 'reduncini.596.jpg', 'reduncini.645.jpg', 'reduncini.384.jpg', 'reduncini.628.jpg', 'reduncini.450.jpg', 'reduncini.245.jpg', 'reduncini.636.jpg', 'reduncini.136.jpg', 'reduncini.371.jpg', 'reduncini.310.jpg', 'reduncini.178.jpg', 'reduncini.467.jpg', 'reduncini.268.jpg', 'reduncini.290.jpg', 'reduncini.431.jpg', 'reduncini.390.jpg', 'reduncini.363.jpg', 'reduncini.617.jpg', 'reduncini.142.jpg', 'reduncini.430.jpg', 'reduncini.45.jpg', 'reduncini.369.jpg', 'reduncini.255.jpg', 'reduncini.77.jpg', 'reduncini.335.jpg', 'reduncini.501.jpg', 'reduncini.533.jpg', 'reduncini.35.jpg', 'reduncini.164.jpg', 'reduncini.284.jpg', 'reduncini.503.jpg', 'reduncini.473.jpg', 'reduncini.211.jpg', 'reduncini.15.jpg', 'reduncini.591.jpg', 'reduncini.494.jpg', 'reduncini.439.jpg', 'reduncini.33.jpg', 'reduncini.585.jpg']\n",
      "371\n",
      "['tragelaphini.320.jpg', 'tragelaphini.249.jpg', 'tragelaphini.17.jpg', 'tragelaphini.63.jpg', 'tragelaphini.64.jpg', 'tragelaphini.402.jpg', 'tragelaphini.14.jpg', 'tragelaphini.318.jpg', 'tragelaphini.119.jpg', 'tragelaphini.484.jpg', 'tragelaphini.384.jpg', 'tragelaphini.208.jpg', 'tragelaphini.6.jpg', 'tragelaphini.324.jpg', 'tragelaphini.52.jpg', 'tragelaphini.70.jpg', 'tragelaphini.180.jpg', 'tragelaphini.381.jpg', 'tragelaphini.138.jpg', 'tragelaphini.293.jpg', 'tragelaphini.360.jpg', 'tragelaphini.408.jpg', 'tragelaphini.111.jpg', 'tragelaphini.263.jpg', 'tragelaphini.337.jpg', 'tragelaphini.5.jpg', 'tragelaphini.461.jpg', 'tragelaphini.474.jpg', 'tragelaphini.58.jpg', 'tragelaphini.383.jpg', 'tragelaphini.38.jpg', 'tragelaphini.524.jpg', 'tragelaphini.182.jpg', 'tragelaphini.0.jpg', 'tragelaphini.355.jpg', 'tragelaphini.365.jpg', 'tragelaphini.295.jpg', 'tragelaphini.26.jpg', 'tragelaphini.497.jpg', 'tragelaphini.34.jpg', 'tragelaphini.392.jpg', 'tragelaphini.516.jpg', 'tragelaphini.188.jpg', 'tragelaphini.285.jpg', 'tragelaphini.75.jpg', 'tragelaphini.219.jpg', 'tragelaphini.378.jpg', 'tragelaphini.210.jpg', 'tragelaphini.62.jpg', 'tragelaphini.511.jpg', 'tragelaphini.213.jpg', 'tragelaphini.458.jpg', 'tragelaphini.436.jpg', 'tragelaphini.411.jpg', 'tragelaphini.451.jpg', 'tragelaphini.46.jpg', 'tragelaphini.11.jpg', 'tragelaphini.444.jpg', 'tragelaphini.323.jpg', 'tragelaphini.391.jpg', 'tragelaphini.500.jpg', 'tragelaphini.127.jpg', 'tragelaphini.303.jpg', 'tragelaphini.159.jpg', 'tragelaphini.409.jpg', 'tragelaphini.203.jpg', 'tragelaphini.447.jpg', 'tragelaphini.67.jpg', 'tragelaphini.404.jpg', 'tragelaphini.8.jpg', 'tragelaphini.389.jpg', 'tragelaphini.453.jpg', 'tragelaphini.27.jpg', 'tragelaphini.128.jpg', 'tragelaphini.428.jpg', 'tragelaphini.261.jpg', 'tragelaphini.162.jpg', 'tragelaphini.375.jpg', 'tragelaphini.425.jpg', 'tragelaphini.29.jpg', 'tragelaphini.129.jpg', 'tragelaphini.20.jpg', 'tragelaphini.512.jpg', 'tragelaphini.94.jpg', 'tragelaphini.193.jpg', 'tragelaphini.31.jpg', 'tragelaphini.135.jpg', 'tragelaphini.60.jpg', 'tragelaphini.340.jpg', 'tragelaphini.66.jpg', 'tragelaphini.454.jpg', 'tragelaphini.104.jpg', 'tragelaphini.446.jpg', 'tragelaphini.487.jpg', 'tragelaphini.172.jpg', 'tragelaphini.309.jpg', 'tragelaphini.472.jpg', 'tragelaphini.396.jpg', 'tragelaphini.181.jpg', 'tragelaphini.317.jpg', 'tragelaphini.194.jpg', 'tragelaphini.292.jpg', 'tragelaphini.173.jpg', 'tragelaphini.105.jpg', 'tragelaphini.429.jpg', 'tragelaphini.366.jpg', 'tragelaphini.265.jpg', 'tragelaphini.239.jpg', 'tragelaphini.65.jpg', 'tragelaphini.477.jpg', 'tragelaphini.53.jpg', 'tragelaphini.522.jpg', 'tragelaphini.74.jpg', 'tragelaphini.116.jpg', 'tragelaphini.118.jpg', 'tragelaphini.252.jpg', 'tragelaphini.264.jpg', 'tragelaphini.462.jpg', 'tragelaphini.176.jpg', 'tragelaphini.346.jpg', 'tragelaphini.158.jpg', 'tragelaphini.170.jpg', 'tragelaphini.291.jpg', 'tragelaphini.377.jpg', 'tragelaphini.103.jpg', 'tragelaphini.362.jpg', 'tragelaphini.21.jpg', 'tragelaphini.450.jpg', 'tragelaphini.464.jpg', 'tragelaphini.300.jpg', 'tragelaphini.251.jpg', 'tragelaphini.19.jpg', 'tragelaphini.149.jpg', 'tragelaphini.372.jpg', 'tragelaphini.220.jpg', 'tragelaphini.356.jpg', 'tragelaphini.352.jpg', 'tragelaphini.367.jpg', 'tragelaphini.370.jpg', 'tragelaphini.282.jpg', 'tragelaphini.272.jpg', 'tragelaphini.443.jpg', 'tragelaphini.79.jpg', 'tragelaphini.183.jpg', 'tragelaphini.349.jpg', 'tragelaphini.448.jpg', 'tragelaphini.96.jpg', 'tragelaphini.161.jpg', 'tragelaphini.92.jpg', 'tragelaphini.109.jpg', 'tragelaphini.262.jpg', 'tragelaphini.206.jpg', 'tragelaphini.231.jpg', 'tragelaphini.10.jpg', 'tragelaphini.39.jpg', 'tragelaphini.110.jpg', 'tragelaphini.227.jpg', 'tragelaphini.276.jpg', 'tragelaphini.373.jpg', 'tragelaphini.117.jpg', 'tragelaphini.131.jpg', 'tragelaphini.143.jpg', 'tragelaphini.87.jpg', 'tragelaphini.108.jpg', 'tragelaphini.415.jpg', 'tragelaphini.44.jpg', 'tragelaphini.394.jpg', 'tragelaphini.171.jpg', 'tragelaphini.115.jpg', 'tragelaphini.235.jpg', 'tragelaphini.488.jpg', 'tragelaphini.113.jpg', 'tragelaphini.37.jpg', 'tragelaphini.527.jpg', 'tragelaphini.386.jpg', 'tragelaphini.514.jpg', 'tragelaphini.269.jpg', 'tragelaphini.492.jpg', 'tragelaphini.405.jpg', 'tragelaphini.417.jpg', 'tragelaphini.279.jpg', 'tragelaphini.137.jpg', 'tragelaphini.7.jpg', 'tragelaphini.258.jpg', 'tragelaphini.88.jpg', 'tragelaphini.353.jpg', 'tragelaphini.30.jpg', 'tragelaphini.306.jpg', 'tragelaphini.296.jpg', 'tragelaphini.403.jpg', 'tragelaphini.153.jpg', 'tragelaphini.201.jpg', 'tragelaphini.380.jpg', 'tragelaphini.445.jpg', 'tragelaphini.204.jpg', 'tragelaphini.9.jpg', 'tragelaphini.200.jpg', 'tragelaphini.322.jpg', 'tragelaphini.412.jpg', 'tragelaphini.342.jpg', 'tragelaphini.327.jpg', 'tragelaphini.241.jpg', 'tragelaphini.197.jpg', 'tragelaphini.368.jpg', 'tragelaphini.371.jpg', 'tragelaphini.133.jpg', 'tragelaphini.48.jpg', 'tragelaphini.147.jpg', 'tragelaphini.270.jpg', 'tragelaphini.51.jpg', 'tragelaphini.333.jpg', 'tragelaphini.243.jpg', 'tragelaphini.242.jpg', 'tragelaphini.455.jpg', 'tragelaphini.112.jpg', 'tragelaphini.519.jpg', 'tragelaphini.434.jpg', 'tragelaphini.331.jpg', 'tragelaphini.289.jpg', 'tragelaphini.452.jpg', 'tragelaphini.190.jpg', 'tragelaphini.509.jpg', 'tragelaphini.56.jpg', 'tragelaphini.13.jpg', 'tragelaphini.287.jpg', 'tragelaphini.202.jpg', 'tragelaphini.513.jpg', 'tragelaphini.24.jpg', 'tragelaphini.260.jpg', 'tragelaphini.43.jpg', 'tragelaphini.424.jpg', 'tragelaphini.357.jpg', 'tragelaphini.483.jpg', 'tragelaphini.313.jpg', 'tragelaphini.95.jpg', 'tragelaphini.156.jpg', 'tragelaphini.101.jpg', 'tragelaphini.189.jpg', 'tragelaphini.406.jpg', 'tragelaphini.82.jpg', 'tragelaphini.468.jpg', 'tragelaphini.315.jpg', 'tragelaphini.325.jpg', 'tragelaphini.4.jpg', 'tragelaphini.419.jpg', 'tragelaphini.214.jpg', 'tragelaphini.257.jpg', 'tragelaphini.283.jpg', 'tragelaphini.152.jpg', 'tragelaphini.470.jpg', 'tragelaphini.361.jpg', 'tragelaphini.407.jpg', 'tragelaphini.330.jpg', 'tragelaphini.421.jpg', 'tragelaphini.246.jpg', 'tragelaphini.86.jpg', 'tragelaphini.442.jpg', 'tragelaphini.485.jpg', 'tragelaphini.42.jpg', 'tragelaphini.328.jpg', 'tragelaphini.493.jpg', 'tragelaphini.347.jpg', 'tragelaphini.387.jpg', 'tragelaphini.141.jpg', 'tragelaphini.280.jpg', 'tragelaphini.174.jpg', 'tragelaphini.529.jpg', 'tragelaphini.416.jpg', 'tragelaphini.400.jpg', 'tragelaphini.271.jpg', 'tragelaphini.385.jpg', 'tragelaphini.259.jpg', 'tragelaphini.150.jpg', 'tragelaphini.238.jpg', 'tragelaphini.144.jpg', 'tragelaphini.354.jpg', 'tragelaphini.288.jpg', 'tragelaphini.422.jpg', 'tragelaphini.312.jpg', 'tragelaphini.130.jpg', 'tragelaphini.374.jpg', 'tragelaphini.28.jpg', 'tragelaphini.476.jpg', 'tragelaphini.297.jpg', 'tragelaphini.521.jpg', 'tragelaphini.102.jpg', 'tragelaphini.195.jpg', 'tragelaphini.209.jpg', 'tragelaphini.217.jpg', 'tragelaphini.107.jpg', 'tragelaphini.3.jpg', 'tragelaphini.326.jpg', 'tragelaphini.186.jpg', 'tragelaphini.508.jpg', 'tragelaphini.319.jpg', 'tragelaphini.523.jpg', 'tragelaphini.399.jpg', 'tragelaphini.343.jpg', 'tragelaphini.339.jpg', 'tragelaphini.237.jpg', 'tragelaphini.157.jpg', 'tragelaphini.496.jpg', 'tragelaphini.106.jpg', 'tragelaphini.218.jpg', 'tragelaphini.486.jpg', 'tragelaphini.302.jpg', 'tragelaphini.401.jpg', 'tragelaphini.93.jpg', 'tragelaphini.358.jpg', 'tragelaphini.98.jpg', 'tragelaphini.379.jpg', 'tragelaphini.304.jpg', 'tragelaphini.184.jpg', 'tragelaphini.72.jpg', 'tragelaphini.244.jpg', 'tragelaphini.83.jpg', 'tragelaphini.146.jpg', 'tragelaphini.54.jpg', 'tragelaphini.475.jpg', 'tragelaphini.305.jpg', 'tragelaphini.23.jpg', 'tragelaphini.515.jpg', 'tragelaphini.148.jpg', 'tragelaphini.126.jpg', 'tragelaphini.410.jpg', 'tragelaphini.151.jpg', 'tragelaphini.59.jpg', 'tragelaphini.12.jpg', 'tragelaphini.414.jpg', 'tragelaphini.321.jpg', 'tragelaphini.294.jpg', 'tragelaphini.301.jpg', 'tragelaphini.329.jpg', 'tragelaphini.100.jpg', 'tragelaphini.479.jpg', 'tragelaphini.427.jpg', 'tragelaphini.165.jpg', 'tragelaphini.121.jpg', 'tragelaphini.78.jpg', 'tragelaphini.426.jpg', 'tragelaphini.388.jpg', 'tragelaphini.456.jpg', 'tragelaphini.168.jpg', 'tragelaphini.216.jpg', 'tragelaphini.350.jpg', 'tragelaphini.132.jpg', 'tragelaphini.175.jpg', 'tragelaphini.467.jpg', 'tragelaphini.466.jpg', 'tragelaphini.525.jpg', 'tragelaphini.234.jpg', 'tragelaphini.71.jpg', 'tragelaphini.248.jpg', 'tragelaphini.232.jpg', 'tragelaphini.311.jpg', 'tragelaphini.55.jpg', 'tragelaphini.518.jpg', 'tragelaphini.47.jpg', 'tragelaphini.179.jpg', 'tragelaphini.25.jpg', 'tragelaphini.471.jpg', 'tragelaphini.482.jpg', 'tragelaphini.224.jpg', 'tragelaphini.1.jpg', 'tragelaphini.460.jpg', 'tragelaphini.433.jpg', 'tragelaphini.50.jpg', 'tragelaphini.528.jpg', 'tragelaphini.286.jpg', 'tragelaphini.420.jpg', 'tragelaphini.359.jpg']\n",
      "160\n",
      "['tragelaphini.382.jpg', 'tragelaphini.198.jpg', 'tragelaphini.275.jpg', 'tragelaphini.435.jpg', 'tragelaphini.469.jpg', 'tragelaphini.277.jpg', 'tragelaphini.510.jpg', 'tragelaphini.69.jpg', 'tragelaphini.205.jpg', 'tragelaphini.236.jpg', 'tragelaphini.507.jpg', 'tragelaphini.250.jpg', 'tragelaphini.438.jpg', 'tragelaphini.32.jpg', 'tragelaphini.517.jpg', 'tragelaphini.308.jpg', 'tragelaphini.247.jpg', 'tragelaphini.266.jpg', 'tragelaphini.139.jpg', 'tragelaphini.268.jpg', 'tragelaphini.376.jpg', 'tragelaphini.123.jpg', 'tragelaphini.344.jpg', 'tragelaphini.253.jpg', 'tragelaphini.199.jpg', 'tragelaphini.81.jpg', 'tragelaphini.490.jpg', 'tragelaphini.207.jpg', 'tragelaphini.229.jpg', 'tragelaphini.506.jpg', 'tragelaphini.40.jpg', 'tragelaphini.124.jpg', 'tragelaphini.163.jpg', 'tragelaphini.169.jpg', 'tragelaphini.491.jpg', 'tragelaphini.364.jpg', 'tragelaphini.278.jpg', 'tragelaphini.489.jpg', 'tragelaphini.463.jpg', 'tragelaphini.222.jpg', 'tragelaphini.167.jpg', 'tragelaphini.177.jpg', 'tragelaphini.441.jpg', 'tragelaphini.245.jpg', 'tragelaphini.90.jpg', 'tragelaphini.398.jpg', 'tragelaphini.504.jpg', 'tragelaphini.332.jpg', 'tragelaphini.520.jpg', 'tragelaphini.84.jpg', 'tragelaphini.457.jpg', 'tragelaphini.498.jpg', 'tragelaphini.136.jpg', 'tragelaphini.61.jpg', 'tragelaphini.91.jpg', 'tragelaphini.267.jpg', 'tragelaphini.316.jpg', 'tragelaphini.73.jpg', 'tragelaphini.140.jpg', 'tragelaphini.348.jpg', 'tragelaphini.125.jpg', 'tragelaphini.228.jpg', 'tragelaphini.212.jpg', 'tragelaphini.221.jpg', 'tragelaphini.178.jpg', 'tragelaphini.97.jpg', 'tragelaphini.413.jpg', 'tragelaphini.85.jpg', 'tragelaphini.226.jpg', 'tragelaphini.49.jpg', 'tragelaphini.480.jpg', 'tragelaphini.397.jpg', 'tragelaphini.57.jpg', 'tragelaphini.449.jpg', 'tragelaphini.307.jpg', 'tragelaphini.191.jpg', 'tragelaphini.290.jpg', 'tragelaphini.196.jpg', 'tragelaphini.76.jpg', 'tragelaphini.41.jpg', 'tragelaphini.437.jpg', 'tragelaphini.273.jpg', 'tragelaphini.36.jpg', 'tragelaphini.336.jpg', 'tragelaphini.310.jpg', 'tragelaphini.418.jpg', 'tragelaphini.154.jpg', 'tragelaphini.254.jpg', 'tragelaphini.16.jpg', 'tragelaphini.18.jpg', 'tragelaphini.478.jpg', 'tragelaphini.526.jpg', 'tragelaphini.114.jpg', 'tragelaphini.431.jpg', 'tragelaphini.80.jpg', 'tragelaphini.256.jpg', 'tragelaphini.432.jpg', 'tragelaphini.166.jpg', 'tragelaphini.299.jpg', 'tragelaphini.334.jpg', 'tragelaphini.530.jpg', 'tragelaphini.240.jpg', 'tragelaphini.223.jpg', 'tragelaphini.230.jpg', 'tragelaphini.281.jpg', 'tragelaphini.341.jpg', 'tragelaphini.160.jpg', 'tragelaphini.495.jpg', 'tragelaphini.459.jpg', 'tragelaphini.395.jpg', 'tragelaphini.187.jpg', 'tragelaphini.274.jpg', 'tragelaphini.502.jpg', 'tragelaphini.465.jpg', 'tragelaphini.481.jpg', 'tragelaphini.99.jpg', 'tragelaphini.499.jpg', 'tragelaphini.120.jpg', 'tragelaphini.2.jpg', 'tragelaphini.298.jpg', 'tragelaphini.22.jpg', 'tragelaphini.192.jpg', 'tragelaphini.314.jpg', 'tragelaphini.225.jpg', 'tragelaphini.122.jpg', 'tragelaphini.440.jpg', 'tragelaphini.393.jpg', 'tragelaphini.505.jpg', 'tragelaphini.68.jpg', 'tragelaphini.185.jpg', 'tragelaphini.338.jpg', 'tragelaphini.155.jpg', 'tragelaphini.351.jpg', 'tragelaphini.89.jpg', 'tragelaphini.233.jpg', 'tragelaphini.134.jpg', 'tragelaphini.345.jpg', 'tragelaphini.423.jpg', 'tragelaphini.145.jpg', 'tragelaphini.215.jpg', 'tragelaphini.390.jpg', 'tragelaphini.363.jpg', 'tragelaphini.142.jpg', 'tragelaphini.430.jpg', 'tragelaphini.45.jpg', 'tragelaphini.369.jpg', 'tragelaphini.255.jpg', 'tragelaphini.77.jpg', 'tragelaphini.335.jpg', 'tragelaphini.501.jpg', 'tragelaphini.35.jpg', 'tragelaphini.164.jpg', 'tragelaphini.284.jpg', 'tragelaphini.503.jpg', 'tragelaphini.473.jpg', 'tragelaphini.211.jpg', 'tragelaphini.15.jpg', 'tragelaphini.494.jpg', 'tragelaphini.439.jpg', 'tragelaphini.33.jpg']\n"
     ]
    }
   ],
   "source": [
    "#USE THIS ONE\n",
    "\n",
    "from tensorflow.keras.preprocessing.image import ImageDataGenerator\n",
    "# randomize order of image locations\n",
    "# this will help model in not being data sequence dependent\n",
    "\n",
    "# Copy first CM images to train_alc_dir\n",
    "import random\n",
    "\n",
    "fnames = ['alcelaphini.{}.jpg'.format(i) for i in range(968)]\n",
    "random.seed(10)\n",
    "random.shuffle(fnames)\n",
    "fnamest = fnames[0:679]\n",
    "print(len(fnamest))\n",
    "print(fnamest)\n",
    "\n",
    "for fname in fnamest:\n",
    "    src = os.path.join(original_dir, fname)\n",
    "    dst = os.path.join(train_alc_dir, fname)\n",
    "    shutil.copyfile(src, dst)\n",
    "\n",
    "# Copy next CM images to validation_alc_dir\n",
    "fnamesv = fnames[679:968]\n",
    "print(len(fnamesv))\n",
    "print(fnamesv)\n",
    "for fname in fnamesv:\n",
    "    src = os.path.join(original_dir, fname)\n",
    "    dst = os.path.join(validation_alc_dir, fname)\n",
    "    shutil.copyfile(src, dst)\n",
    "\n",
    "# Copy first TM images to train_ant_dir # \n",
    "fnames = ['antilopini.{}.jpg'.format(i) for i in range(195)]\n",
    "random.seed(10)\n",
    "random.shuffle(fnames)\n",
    "fnamest = fnames[0:133]\n",
    "print(len(fnamest))\n",
    "print(fnamest)\n",
    "\n",
    "for fname in fnamest:\n",
    "    src = os.path.join(original_dir, fname)\n",
    "    dst = os.path.join(train_ant_dir, fname)\n",
    "    shutil.copyfile(src, dst)\n",
    "        \n",
    "# Copy next 10 TM images to validation_ant_dir\n",
    "fnamesv = fnames[133:195]\n",
    "print(len(fnamesv))\n",
    "print(fnamesv)\n",
    "for fname in fnamesv:\n",
    "    src = os.path.join(original_dir, fname)\n",
    "    dst = os.path.join(validation_ant_dir, fname)\n",
    "    shutil.copyfile(src, dst)\n",
    "         \n",
    "    \n",
    "# Copy first TM images to train_hip_dir # \n",
    "fnames = ['hippotragini.{}.jpg'.format(i) for i in range(521)]\n",
    "random.seed(10)\n",
    "random.shuffle(fnames)\n",
    "fnamest = fnames[0:364]\n",
    "print(len(fnamest))\n",
    "print(fnamest)\n",
    "\n",
    "for fname in fnamest:\n",
    "    src = os.path.join(original_dir, fname)\n",
    "    dst = os.path.join(train_hip_dir, fname)\n",
    "    shutil.copyfile(src, dst)\n",
    "        \n",
    "# Copy next 10 TM images to validation_hip_dir\n",
    "fnamesv = fnames[364:521]\n",
    "print(len(fnamesv))\n",
    "print(fnamesv)\n",
    "for fname in fnamesv:\n",
    "    src = os.path.join(original_dir, fname)\n",
    "    dst = os.path.join(validation_hip_dir, fname)\n",
    "    shutil.copyfile(src, dst)\n",
    "\n",
    "\n",
    "# Copy first TM images to train_red_dir # \n",
    "fnames = ['reduncini.{}.jpg'.format(i) for i in range(664)]\n",
    "random.seed(10)\n",
    "random.shuffle(fnames)\n",
    "fnamest = fnames[0:462]\n",
    "print(len(fnamest))\n",
    "print(fnamest)\n",
    "\n",
    "for fname in fnamest:\n",
    "    src = os.path.join(original_dir, fname)\n",
    "    dst = os.path.join(train_red_dir, fname)\n",
    "    shutil.copyfile(src, dst)\n",
    "        \n",
    "# Copy next 10 TM images to validation_red_dir\n",
    "fnamesv = fnames[462:664]\n",
    "print(len(fnamesv))\n",
    "print(fnamesv)\n",
    "for fname in fnamesv:\n",
    "    src = os.path.join(original_dir, fname)\n",
    "    dst = os.path.join(validation_red_dir, fname)\n",
    "    shutil.copyfile(src, dst)\n",
    "\n",
    "\n",
    "# Copy first TM images to train_tra_dir # \n",
    "fnames = ['tragelaphini.{}.jpg'.format(i) for i in range(531)]\n",
    "random.seed(10)\n",
    "random.shuffle(fnames)\n",
    "fnamest = fnames[0:371]\n",
    "print(len(fnamest))\n",
    "print(fnamest)\n",
    "\n",
    "for fname in fnamest:\n",
    "    src = os.path.join(original_dir, fname)\n",
    "    dst = os.path.join(train_tra_dir, fname)\n",
    "    shutil.copyfile(src, dst)\n",
    "        \n",
    "# Copy next 10 TM images to validation_tra_dir\n",
    "fnamesv = fnames[371:531]\n",
    "print(len(fnamesv))\n",
    "print(fnamesv)\n",
    "for fname in fnamesv:\n",
    "    src = os.path.join(original_dir, fname)\n",
    "    dst = os.path.join(validation_tra_dir, fname)\n",
    "    shutil.copyfile(src, dst)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "efe09e3f",
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#training and testing sets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "02b116cf",
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "automated-shanghai",
   "metadata": {},
   "outputs": [],
   "source": [
    "from keras.applications.densenet import preprocess_input#DENSENET201\n",
    "from keras.applications.resnet50 import preprocess_input#RESNET50\n",
    "from keras.applications.inception_resnet_v2 import preprocess_input #InceptionResNetV2 \n",
    "from keras.applications.nasnet import preprocess_input #NASNetLarge\n",
    "from keras.applications.inception_v3 import preprocess_input #InceptionV3\n",
    "from keras.applications.vgg19 import preprocess_input #VGG19\n",
    "from keras.applications.vgg16 import preprocess_input #VGG16\n",
    "from keras.applications.imagenet_utils import decode_predictions, preprocess_input#for efficient Net"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "0b730d9a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 2009 images belonging to 5 classes.\n",
      "Found 870 images belonging to 5 classes.\n"
     ]
    }
   ],
   "source": [
    "#from tensorflow.keras.applications.resnet50 import preprocess_input #for RESNET 50\n",
    "from keras.applications.imagenet_utils import decode_predictions, preprocess_input#for efficient Net\n",
    "\n",
    "#Let's train our network using data augmentation and dropout:\n",
    "train_datagen = ImageDataGenerator(\n",
    "    rotation_range=40,\n",
    "    width_shift_range=0.2,\n",
    "    height_shift_range=0.2,\n",
    "    shear_range=0.2,\n",
    "    zoom_range=0.2,\n",
    "    horizontal_flip=True,\n",
    "    preprocessing_function= \\\n",
    "    keras.applications.imagenet_utils.preprocess_input)#OJO!!!! imagenet_utils for Efficient Net\n",
    "\n",
    "# Note that the validation data should not be augmented!\n",
    "test_datagen = ImageDataGenerator(preprocessing_function= \\\n",
    "    keras.applications.imagenet_utils.preprocess_input)#OJO!!!\n",
    "\n",
    "train_generator = train_datagen.flow_from_directory(\n",
    "        # This is the target directory\n",
    "        train_dir,\n",
    "        # All images will be resized \n",
    "        target_size=(250, 200),\n",
    "        batch_size=32,\n",
    "        class_mode='categorical')#put \"categorical\" si son más de 2 categorías\n",
    "\n",
    "validation_generator = test_datagen.flow_from_directory(\n",
    "        validation_dir,\n",
    "        target_size=(250, 200),\n",
    "        batch_size=20,\n",
    "        class_mode='categorical',\n",
    "        shuffle=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "original-above",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 2009 images belonging to 5 classes.\n",
      "Found 870 images belonging to 5 classes.\n",
      "(2009, 250, 200, 3) train samples\n",
      "(870, 250, 200, 3) test samples\n"
     ]
    }
   ],
   "source": [
    "#indicate here the number of images for training and testing in the \"batch size\" field of each section\n",
    "datagenTrain=train_datagen.flow_from_directory(\n",
    "        # This is the target directory\n",
    "        train_dir,\n",
    "        # All images will be resized to 40x160\n",
    "        target_size=(250,200),\n",
    "        batch_size=2009,\n",
    "        # Since we use binary_crossentropy loss, we need binary labels\n",
    "        class_mode='categorical')\n",
    "datagenTest=test_datagen.flow_from_directory(\n",
    "        # This is the target directory\n",
    "        validation_dir,\n",
    "        # All images will be resized to 40x160\n",
    "        target_size=(250, 200),\n",
    "        batch_size=870,\n",
    "        # Since we use binary_crossentropy loss, we need binary labels\n",
    "        class_mode='categorical',\n",
    "        shuffle=False)\n",
    "x_train, y_train = next(datagenTrain)\n",
    "x_test, y_test = next(datagenTest)\n",
    "print(x_train.shape, 'train samples')\n",
    "print(x_test.shape, 'test samples')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "62521d75",
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "af7b5cdc",
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#MODULE 2: CHOOSE MODEL"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "0d1d0fac",
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "566a8bbd",
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#activate Dropout "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "ece170ec",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Vgg19 for transfer learning with Dropout\n",
    "import sys\n",
    "from matplotlib import pyplot\n",
    "from tensorflow.keras.applications.vgg19 import VGG19\n",
    "from keras.models import Model\n",
    "from keras.layers import Dense\n",
    "from keras.layers import Flatten\n",
    "from keras.layers import Dropout\n",
    "from keras.optimizers import SGD\n",
    "from keras.preprocessing.image import ImageDataGenerator\n",
    "\n",
    "\n",
    "\n",
    "# define cnn model\n",
    "def define_model():\n",
    "\t# load model\n",
    "\tmodel = VGG19(include_top=False, input_shape=(250, 200, 3))\n",
    "\t# mark loaded layers as not trainable\n",
    "\tfor layer in model.layers:\n",
    "\t\tlayer.trainable = False\n",
    "\t# add new classifier layers\n",
    "\tflat1 = Flatten()(model.layers[-1].output)\n",
    "\tclass1 = Dense(128, activation='relu', kernel_initializer='he_uniform')(flat1)\n",
    "\tdrop=Dropout(0.3)(class1)\n",
    "\toutput = Dense(5, activation='softmax')(drop)\n",
    "\t# define new model\n",
    "\tmodel = Model(inputs=model.inputs, outputs=output)\n",
    "\t# compile model\n",
    "\topt = SGD(lr=0.001, momentum=0.9)\n",
    "\tmodel.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])\n",
    "\treturn model\n",
    "\n",
    "# define model\n",
    "model = define_model()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "21114903",
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "716e2e60",
   "metadata": {},
   "outputs": [],
   "source": [
    "# for transfer learning RESNET50 with Dropout\n",
    "import sys\n",
    "from matplotlib import pyplot\n",
    "from tensorflow.keras.applications.resnet50 import ResNet50\n",
    "from keras.models import Model\n",
    "from keras.layers import Dense\n",
    "from keras.layers import Flatten\n",
    "from keras.layers import Dropout\n",
    "from keras.optimizers import SGD\n",
    "from keras.preprocessing.image import ImageDataGenerator\n",
    "\n",
    "# define cnn model\n",
    "def define_model():\n",
    "\t# load model\n",
    "\tmodel = ResNet50(include_top=False, input_shape=(250, 200, 3))\n",
    "\t# mark loaded layers as not trainable\n",
    "\tfor layer in model.layers:\n",
    "\t\tlayer.trainable = False\n",
    "\t# add new classifier layers\n",
    "\tflat1 = Flatten()(model.layers[-1].output)\n",
    "\tclass1 = Dense(128, activation='relu', kernel_initializer='he_uniform')(flat1)\n",
    "\tdrop=Dropout(0.3)(class1)\n",
    "\toutput = Dense(5, activation='softmax')(drop)\n",
    "\t# define new model\n",
    "\tmodel = Model(inputs=model.inputs, outputs=output)\n",
    "\t# compile model\n",
    "\topt = SGD(lr=0.001, momentum=0.9)\n",
    "\tmodel.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])\n",
    "\treturn model\n",
    "\n",
    "# define model\n",
    "model = define_model()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "50a09b9a",
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "82c7ff2b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# for transfer learning EfficientNetB7 with Dropout\n",
    "import sys\n",
    "from matplotlib import pyplot\n",
    "from tensorflow.keras.applications import EfficientNetB7\n",
    "from keras.models import Model\n",
    "from keras.layers import Dense\n",
    "from keras.layers import Flatten\n",
    "from keras.optimizers import SGD\n",
    "from keras.preprocessing.image import ImageDataGenerator\n",
    "from keras.layers import Dropout\n",
    "# define cnn model\n",
    "def define_model():\n",
    "\t# load model\n",
    "\tmodel = EfficientNetB7(include_top=False, input_shape=(250, 200, 3))\n",
    "\t# mark loaded layers as not trainable\n",
    "\tfor layer in model.layers:\n",
    "\t\tlayer.trainable = False\n",
    "\t# add new classifier layers\n",
    "\tflat1 = Flatten()(model.layers[-1].output)\n",
    "\tclass1 = Dense(128, activation='relu', kernel_initializer='he_uniform')(flat1)\n",
    "\tdrop=Dropout(0.3)(class1)\n",
    "\toutput = Dense(5, activation='softmax')(drop)\n",
    "\t# define new model\n",
    "\tmodel = Model(inputs=model.inputs, outputs=output)\n",
    "\t# compile model\n",
    "\topt = SGD(lr=0.001, momentum=0.9)\n",
    "\tmodel.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])\n",
    "\treturn model\n",
    "\n",
    "# define model\n",
    "model = define_model()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "be5f7ef8",
   "metadata": {},
   "outputs": [],
   "source": [
    "# for transfer learning DENSENET with Dropout\n",
    "import sys\n",
    "from matplotlib import pyplot\n",
    "from tensorflow.keras.applications.densenet import DenseNet201\n",
    "from keras.models import Model\n",
    "from keras.layers import Dense\n",
    "from keras.layers import Flatten\n",
    "from keras.layers import Dropout\n",
    "from keras.optimizers import SGD\n",
    "from keras.preprocessing.image import ImageDataGenerator\n",
    "\n",
    "# define cnn model\n",
    "def define_model():\n",
    "\t# load model\n",
    "\tmodel = DenseNet201(include_top=False, input_shape=(250, 200, 3))\n",
    "\t# mark loaded layers as not trainable\n",
    "\tfor layer in model.layers:\n",
    "\t\tlayer.trainable = False\n",
    "\t# add new classifier layers\n",
    "\tflat1 = Flatten()(model.layers[-1].output)\n",
    "\tclass1 = Dense(128, activation='relu', kernel_initializer='he_uniform')(flat1)\n",
    "\tdrop=Dropout(0.3)(class1)\n",
    "\toutput = Dense(5, activation='softmax')(drop)\n",
    "\t# define new model\n",
    "\tmodel = Model(inputs=model.inputs, outputs=output)\n",
    "\t# compile model\n",
    "\topt = SGD(lr=0.001, momentum=0.9)\n",
    "\tmodel.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])\n",
    "\treturn model\n",
    "\n",
    "# define model\n",
    "model = define_model()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e1b0d8a9",
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "703e6c3c",
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6fc143a8",
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#RUN MODEL:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "f73ae474",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\IDEA\\Anaconda3\\envs\\gputest\\lib\\site-packages\\tensorflow\\python\\keras\\engine\\training.py:1844: UserWarning: `Model.fit_generator` is deprecated and will be removed in a future version. Please use `Model.fit`, which supports generators.\n",
      "  warnings.warn('`Model.fit_generator` is deprecated and '\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/100\n",
      "63/63 [==============================] - 106s 1s/step - loss: 1.4575 - accuracy: 0.4240 - val_loss: 0.8456 - val_accuracy: 0.6977\n",
      "Epoch 2/100\n",
      "63/63 [==============================] - 63s 1s/step - loss: 1.0152 - accuracy: 0.5924 - val_loss: 0.7017 - val_accuracy: 0.7080\n",
      "Epoch 3/100\n",
      "63/63 [==============================] - 63s 999ms/step - loss: 0.8866 - accuracy: 0.6423 - val_loss: 0.6898 - val_accuracy: 0.7322\n",
      "Epoch 4/100\n",
      "63/63 [==============================] - 63s 996ms/step - loss: 0.8373 - accuracy: 0.6643 - val_loss: 0.6077 - val_accuracy: 0.7782\n",
      "Epoch 5/100\n",
      "63/63 [==============================] - 68s 1s/step - loss: 0.8005 - accuracy: 0.6735 - val_loss: 0.6262 - val_accuracy: 0.7448\n",
      "Epoch 6/100\n",
      "63/63 [==============================] - 65s 1s/step - loss: 0.7977 - accuracy: 0.6714 - val_loss: 0.5730 - val_accuracy: 0.8000\n",
      "Epoch 7/100\n",
      "63/63 [==============================] - 65s 1s/step - loss: 0.7453 - accuracy: 0.7040 - val_loss: 0.5335 - val_accuracy: 0.8092\n",
      "Epoch 8/100\n",
      "63/63 [==============================] - 69s 1s/step - loss: 0.6508 - accuracy: 0.7385 - val_loss: 0.5031 - val_accuracy: 0.8069\n",
      "Epoch 9/100\n",
      "63/63 [==============================] - 68s 1s/step - loss: 0.7223 - accuracy: 0.6906 - val_loss: 0.4811 - val_accuracy: 0.8138\n",
      "Epoch 10/100\n",
      "63/63 [==============================] - 67s 1s/step - loss: 0.6387 - accuracy: 0.7411 - val_loss: 0.4564 - val_accuracy: 0.8310\n",
      "Epoch 11/100\n",
      "63/63 [==============================] - 67s 1s/step - loss: 0.6265 - accuracy: 0.7351 - val_loss: 0.4513 - val_accuracy: 0.8322\n",
      "Epoch 12/100\n",
      "63/63 [==============================] - 67s 1s/step - loss: 0.6094 - accuracy: 0.7578 - val_loss: 0.4542 - val_accuracy: 0.8253\n",
      "Epoch 13/100\n",
      "63/63 [==============================] - 69s 1s/step - loss: 0.5994 - accuracy: 0.7484 - val_loss: 0.4303 - val_accuracy: 0.8391\n",
      "Epoch 14/100\n",
      "63/63 [==============================] - 66s 1s/step - loss: 0.5625 - accuracy: 0.7738 - val_loss: 0.4111 - val_accuracy: 0.8460\n",
      "Epoch 15/100\n",
      "63/63 [==============================] - 66s 1s/step - loss: 0.5538 - accuracy: 0.7937 - val_loss: 0.4662 - val_accuracy: 0.8264\n",
      "Epoch 16/100\n",
      "63/63 [==============================] - 66s 1s/step - loss: 0.5439 - accuracy: 0.7811 - val_loss: 0.4112 - val_accuracy: 0.8494\n",
      "Epoch 17/100\n",
      "63/63 [==============================] - 65s 1s/step - loss: 0.5456 - accuracy: 0.7883 - val_loss: 0.5086 - val_accuracy: 0.8092\n",
      "Epoch 18/100\n",
      "63/63 [==============================] - 64s 1s/step - loss: 0.5560 - accuracy: 0.7692 - val_loss: 0.3491 - val_accuracy: 0.8667\n",
      "Epoch 19/100\n",
      "63/63 [==============================] - 63s 1s/step - loss: 0.4896 - accuracy: 0.8098 - val_loss: 0.4323 - val_accuracy: 0.8391\n",
      "Epoch 20/100\n",
      "63/63 [==============================] - 66s 1s/step - loss: 0.5369 - accuracy: 0.7834 - val_loss: 0.4155 - val_accuracy: 0.8287\n",
      "Epoch 21/100\n",
      "63/63 [==============================] - 66s 1s/step - loss: 0.5435 - accuracy: 0.7692 - val_loss: 0.3729 - val_accuracy: 0.8598\n",
      "Epoch 22/100\n",
      "63/63 [==============================] - 66s 1s/step - loss: 0.5297 - accuracy: 0.7824 - val_loss: 0.3763 - val_accuracy: 0.8586\n",
      "Epoch 23/100\n",
      "63/63 [==============================] - 66s 1s/step - loss: 0.5397 - accuracy: 0.7820 - val_loss: 0.3908 - val_accuracy: 0.8575\n",
      "Epoch 24/100\n",
      "63/63 [==============================] - 65s 1s/step - loss: 0.5263 - accuracy: 0.7930 - val_loss: 0.3724 - val_accuracy: 0.8471\n",
      "Epoch 25/100\n",
      "63/63 [==============================] - 66s 1s/step - loss: 0.4944 - accuracy: 0.8060 - val_loss: 0.3582 - val_accuracy: 0.8736\n",
      "Epoch 26/100\n",
      "63/63 [==============================] - 65s 1s/step - loss: 0.5393 - accuracy: 0.7896 - val_loss: 0.3542 - val_accuracy: 0.8678\n",
      "Epoch 27/100\n",
      "63/63 [==============================] - 64s 1s/step - loss: 0.5353 - accuracy: 0.7938 - val_loss: 0.3437 - val_accuracy: 0.8793\n",
      "Epoch 28/100\n",
      "63/63 [==============================] - 63s 997ms/step - loss: 0.5099 - accuracy: 0.7951 - val_loss: 0.3676 - val_accuracy: 0.8609\n",
      "Epoch 29/100\n",
      "63/63 [==============================] - 63s 999ms/step - loss: 0.5090 - accuracy: 0.8021 - val_loss: 0.3857 - val_accuracy: 0.8747\n",
      "Epoch 30/100\n",
      "63/63 [==============================] - 63s 1s/step - loss: 0.5115 - accuracy: 0.8185 - val_loss: 0.3811 - val_accuracy: 0.8690\n",
      "Epoch 31/100\n",
      "63/63 [==============================] - 63s 996ms/step - loss: 0.4794 - accuracy: 0.8173 - val_loss: 0.3513 - val_accuracy: 0.8632\n",
      "Epoch 32/100\n",
      "63/63 [==============================] - 63s 999ms/step - loss: 0.5053 - accuracy: 0.8049 - val_loss: 0.3183 - val_accuracy: 0.8805\n",
      "Epoch 33/100\n",
      "63/63 [==============================] - 63s 1000ms/step - loss: 0.4427 - accuracy: 0.8304 - val_loss: 0.3697 - val_accuracy: 0.8529\n",
      "Epoch 34/100\n",
      "63/63 [==============================] - 63s 1s/step - loss: 0.4385 - accuracy: 0.8217 - val_loss: 0.3492 - val_accuracy: 0.8690\n",
      "Epoch 35/100\n",
      "63/63 [==============================] - 63s 1000ms/step - loss: 0.4359 - accuracy: 0.8249 - val_loss: 0.3877 - val_accuracy: 0.8345\n",
      "Epoch 36/100\n",
      "63/63 [==============================] - 63s 994ms/step - loss: 0.4922 - accuracy: 0.7987 - val_loss: 0.4651 - val_accuracy: 0.8218\n",
      "Epoch 37/100\n",
      "63/63 [==============================] - 63s 1s/step - loss: 0.4522 - accuracy: 0.8284 - val_loss: 0.3738 - val_accuracy: 0.8621\n",
      "Epoch 38/100\n",
      "63/63 [==============================] - 63s 1s/step - loss: 0.4535 - accuracy: 0.8194 - val_loss: 0.3292 - val_accuracy: 0.8782\n",
      "Epoch 39/100\n",
      "63/63 [==============================] - 63s 1s/step - loss: 0.4827 - accuracy: 0.8126 - val_loss: 0.3264 - val_accuracy: 0.8874\n",
      "Epoch 40/100\n",
      "63/63 [==============================] - 63s 1s/step - loss: 0.4749 - accuracy: 0.8219 - val_loss: 0.3918 - val_accuracy: 0.8609\n",
      "Epoch 41/100\n",
      "63/63 [==============================] - 63s 1s/step - loss: 0.4251 - accuracy: 0.8398 - val_loss: 0.3128 - val_accuracy: 0.8874\n",
      "Epoch 42/100\n",
      "63/63 [==============================] - 63s 995ms/step - loss: 0.4046 - accuracy: 0.8367 - val_loss: 0.3743 - val_accuracy: 0.8552\n",
      "Epoch 43/100\n",
      "63/63 [==============================] - 63s 999ms/step - loss: 0.3841 - accuracy: 0.8464 - val_loss: 0.3076 - val_accuracy: 0.8770\n",
      "Epoch 44/100\n",
      "63/63 [==============================] - 64s 1s/step - loss: 0.4257 - accuracy: 0.8414 - val_loss: 0.3146 - val_accuracy: 0.8897\n",
      "Epoch 45/100\n",
      "63/63 [==============================] - 63s 1s/step - loss: 0.4641 - accuracy: 0.8129 - val_loss: 0.3509 - val_accuracy: 0.8793\n",
      "Epoch 46/100\n",
      "63/63 [==============================] - 63s 992ms/step - loss: 0.4561 - accuracy: 0.8150 - val_loss: 0.3505 - val_accuracy: 0.8632\n",
      "Epoch 47/100\n",
      "63/63 [==============================] - 63s 1s/step - loss: 0.3794 - accuracy: 0.8437 - val_loss: 0.3217 - val_accuracy: 0.8770\n",
      "Epoch 48/100\n",
      "63/63 [==============================] - 63s 996ms/step - loss: 0.4139 - accuracy: 0.8417 - val_loss: 0.2860 - val_accuracy: 0.9000\n",
      "Epoch 49/100\n",
      "63/63 [==============================] - 63s 998ms/step - loss: 0.4074 - accuracy: 0.8465 - val_loss: 0.3106 - val_accuracy: 0.8874\n",
      "Epoch 50/100\n",
      "63/63 [==============================] - 63s 997ms/step - loss: 0.4362 - accuracy: 0.8172 - val_loss: 0.3004 - val_accuracy: 0.8862\n",
      "Epoch 51/100\n",
      "63/63 [==============================] - 63s 998ms/step - loss: 0.4121 - accuracy: 0.8395 - val_loss: 0.3025 - val_accuracy: 0.8828\n",
      "Epoch 52/100\n",
      "63/63 [==============================] - 63s 1s/step - loss: 0.4213 - accuracy: 0.8274 - val_loss: 0.3548 - val_accuracy: 0.8724\n",
      "Epoch 53/100\n",
      "63/63 [==============================] - 63s 996ms/step - loss: 0.4273 - accuracy: 0.8355 - val_loss: 0.3034 - val_accuracy: 0.8908\n",
      "Epoch 54/100\n",
      "63/63 [==============================] - 63s 997ms/step - loss: 0.3892 - accuracy: 0.8592 - val_loss: 0.3310 - val_accuracy: 0.8816\n",
      "Epoch 55/100\n",
      "63/63 [==============================] - 63s 1s/step - loss: 0.4177 - accuracy: 0.8389 - val_loss: 0.3156 - val_accuracy: 0.8862\n",
      "Epoch 56/100\n",
      "63/63 [==============================] - 63s 991ms/step - loss: 0.3691 - accuracy: 0.8537 - val_loss: 0.3426 - val_accuracy: 0.8598\n",
      "Epoch 57/100\n",
      "63/63 [==============================] - 63s 999ms/step - loss: 0.4231 - accuracy: 0.8394 - val_loss: 0.3106 - val_accuracy: 0.8862\n",
      "Epoch 58/100\n",
      "63/63 [==============================] - 63s 997ms/step - loss: 0.3592 - accuracy: 0.8552 - val_loss: 0.2823 - val_accuracy: 0.8977\n",
      "Epoch 59/100\n",
      "63/63 [==============================] - 63s 1s/step - loss: 0.4022 - accuracy: 0.8418 - val_loss: 0.3395 - val_accuracy: 0.8736\n",
      "Epoch 60/100\n",
      "63/63 [==============================] - 63s 1s/step - loss: 0.3466 - accuracy: 0.8751 - val_loss: 0.2973 - val_accuracy: 0.8966\n",
      "Epoch 61/100\n",
      "63/63 [==============================] - 63s 994ms/step - loss: 0.3493 - accuracy: 0.8523 - val_loss: 0.3591 - val_accuracy: 0.8667\n",
      "Epoch 62/100\n",
      "63/63 [==============================] - 63s 1s/step - loss: 0.4196 - accuracy: 0.8347 - val_loss: 0.2994 - val_accuracy: 0.8908\n",
      "Epoch 63/100\n",
      "63/63 [==============================] - 63s 1000ms/step - loss: 0.4137 - accuracy: 0.8426 - val_loss: 0.3035 - val_accuracy: 0.8874\n",
      "Epoch 64/100\n",
      "63/63 [==============================] - 64s 1s/step - loss: 0.4193 - accuracy: 0.8414 - val_loss: 0.3428 - val_accuracy: 0.8816\n",
      "Epoch 65/100\n",
      "63/63 [==============================] - 63s 1s/step - loss: 0.3618 - accuracy: 0.8505 - val_loss: 0.2795 - val_accuracy: 0.8977\n",
      "Epoch 66/100\n",
      "63/63 [==============================] - 63s 994ms/step - loss: 0.3484 - accuracy: 0.8643 - val_loss: 0.2801 - val_accuracy: 0.8897\n",
      "Epoch 67/100\n",
      "63/63 [==============================] - 63s 1s/step - loss: 0.3780 - accuracy: 0.8452 - val_loss: 0.3261 - val_accuracy: 0.8632\n",
      "Epoch 68/100\n",
      "63/63 [==============================] - 64s 1s/step - loss: 0.3617 - accuracy: 0.8479 - val_loss: 0.3528 - val_accuracy: 0.8678\n",
      "Epoch 69/100\n",
      "63/63 [==============================] - 63s 993ms/step - loss: 0.3925 - accuracy: 0.8464 - val_loss: 0.3058 - val_accuracy: 0.8828\n",
      "Epoch 70/100\n",
      "63/63 [==============================] - 64s 1s/step - loss: 0.3363 - accuracy: 0.8698 - val_loss: 0.2706 - val_accuracy: 0.8977\n",
      "Epoch 71/100\n",
      "63/63 [==============================] - 63s 995ms/step - loss: 0.3458 - accuracy: 0.8820 - val_loss: 0.3293 - val_accuracy: 0.8805\n",
      "Epoch 72/100\n",
      "63/63 [==============================] - 64s 1s/step - loss: 0.3263 - accuracy: 0.8735 - val_loss: 0.2672 - val_accuracy: 0.8977\n",
      "Epoch 73/100\n",
      "63/63 [==============================] - 63s 996ms/step - loss: 0.3363 - accuracy: 0.8636 - val_loss: 0.2926 - val_accuracy: 0.8897\n",
      "Epoch 74/100\n",
      "63/63 [==============================] - 63s 995ms/step - loss: 0.3631 - accuracy: 0.8586 - val_loss: 0.3653 - val_accuracy: 0.8609\n",
      "Epoch 75/100\n",
      "63/63 [==============================] - 64s 1s/step - loss: 0.3624 - accuracy: 0.8498 - val_loss: 0.4242 - val_accuracy: 0.8483\n",
      "Epoch 76/100\n",
      "63/63 [==============================] - 63s 992ms/step - loss: 0.3892 - accuracy: 0.8459 - val_loss: 0.3286 - val_accuracy: 0.8667\n",
      "Epoch 77/100\n",
      "63/63 [==============================] - 63s 1s/step - loss: 0.3386 - accuracy: 0.8634 - val_loss: 0.3276 - val_accuracy: 0.8816\n",
      "Epoch 78/100\n",
      "63/63 [==============================] - 63s 996ms/step - loss: 0.3755 - accuracy: 0.8486 - val_loss: 0.2529 - val_accuracy: 0.9080\n",
      "Epoch 79/100\n",
      "63/63 [==============================] - 63s 997ms/step - loss: 0.3474 - accuracy: 0.8662 - val_loss: 0.2666 - val_accuracy: 0.9057\n",
      "Epoch 80/100\n",
      "63/63 [==============================] - 63s 1000ms/step - loss: 0.3219 - accuracy: 0.8730 - val_loss: 0.2957 - val_accuracy: 0.8966\n",
      "Epoch 81/100\n",
      "63/63 [==============================] - 63s 997ms/step - loss: 0.3510 - accuracy: 0.8599 - val_loss: 0.2670 - val_accuracy: 0.9034\n",
      "Epoch 82/100\n",
      "63/63 [==============================] - 63s 1s/step - loss: 0.3575 - accuracy: 0.8510 - val_loss: 0.3065 - val_accuracy: 0.8851\n",
      "Epoch 83/100\n",
      "63/63 [==============================] - 63s 998ms/step - loss: 0.3232 - accuracy: 0.8768 - val_loss: 0.3439 - val_accuracy: 0.8782\n",
      "Epoch 84/100\n",
      "63/63 [==============================] - 63s 999ms/step - loss: 0.3301 - accuracy: 0.8672 - val_loss: 0.2832 - val_accuracy: 0.8920\n",
      "Epoch 85/100\n",
      "63/63 [==============================] - 63s 1s/step - loss: 0.3246 - accuracy: 0.8677 - val_loss: 0.2501 - val_accuracy: 0.9080\n",
      "Epoch 86/100\n",
      "63/63 [==============================] - 63s 993ms/step - loss: 0.3458 - accuracy: 0.8759 - val_loss: 0.2365 - val_accuracy: 0.9069\n",
      "Epoch 87/100\n",
      "63/63 [==============================] - 63s 998ms/step - loss: 0.3299 - accuracy: 0.8766 - val_loss: 0.3241 - val_accuracy: 0.8862\n",
      "Epoch 88/100\n",
      "63/63 [==============================] - 63s 997ms/step - loss: 0.3676 - accuracy: 0.8528 - val_loss: 0.3337 - val_accuracy: 0.8632\n",
      "Epoch 89/100\n",
      "63/63 [==============================] - 63s 999ms/step - loss: 0.3384 - accuracy: 0.8618 - val_loss: 0.3513 - val_accuracy: 0.8759\n",
      "Epoch 90/100\n",
      "63/63 [==============================] - 63s 1s/step - loss: 0.3685 - accuracy: 0.8525 - val_loss: 0.2863 - val_accuracy: 0.8977\n",
      "Epoch 91/100\n",
      "63/63 [==============================] - 63s 996ms/step - loss: 0.3168 - accuracy: 0.8730 - val_loss: 0.2495 - val_accuracy: 0.9069\n",
      "Epoch 92/100\n",
      "63/63 [==============================] - 63s 998ms/step - loss: 0.3073 - accuracy: 0.8755 - val_loss: 0.3078 - val_accuracy: 0.8851\n",
      "Epoch 93/100\n",
      "63/63 [==============================] - 63s 998ms/step - loss: 0.3223 - accuracy: 0.8696 - val_loss: 0.3831 - val_accuracy: 0.8483\n",
      "Epoch 94/100\n",
      "63/63 [==============================] - 63s 998ms/step - loss: 0.3120 - accuracy: 0.8914 - val_loss: 0.2558 - val_accuracy: 0.9023\n",
      "Epoch 95/100\n",
      "63/63 [==============================] - 63s 1s/step - loss: 0.3241 - accuracy: 0.8779 - val_loss: 0.2611 - val_accuracy: 0.8977\n",
      "Epoch 96/100\n",
      "63/63 [==============================] - 63s 998ms/step - loss: 0.3505 - accuracy: 0.8691 - val_loss: 0.2624 - val_accuracy: 0.9011\n",
      "Epoch 97/100\n",
      "63/63 [==============================] - 64s 1s/step - loss: 0.3269 - accuracy: 0.8656 - val_loss: 0.2563 - val_accuracy: 0.9023\n",
      "Epoch 98/100\n",
      "63/63 [==============================] - 63s 991ms/step - loss: 0.3214 - accuracy: 0.8603 - val_loss: 0.2410 - val_accuracy: 0.9023\n",
      "Epoch 99/100\n",
      "63/63 [==============================] - 63s 995ms/step - loss: 0.3319 - accuracy: 0.8801 - val_loss: 0.2555 - val_accuracy: 0.9057\n",
      "Epoch 100/100\n",
      "63/63 [==============================] - 63s 1s/step - loss: 0.3191 - accuracy: 0.8753 - val_loss: 0.2810 - val_accuracy: 0.8966\n"
     ]
    }
   ],
   "source": [
    "# define model\n",
    "history = model.fit_generator(\n",
    "      train_generator,\n",
    "      steps_per_epoch=63,\n",
    "      epochs=100,\n",
    "      validation_data=validation_generator,\n",
    "      validation_steps=44)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d9dc8b61",
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "cbdce7fb",
   "metadata": {},
   "outputs": [],
   "source": [
    "#save model\n",
    "model_json=model.to_json()\n",
    "with open(\"densenet_dropout.json\", \"w\") as json_file:\n",
    "    json_file.write(model_json)\n",
    "#serializar los pesos\n",
    "model.save_weights(\"densenet_dropout.h5\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "b05790e8",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\IDEA\\Anaconda3\\envs\\gputest\\lib\\site-packages\\tensorflow\\python\\keras\\engine\\training.py:1905: UserWarning: `Model.predict_generator` is deprecated and will be removed in a future version. Please use `Model.predict`, which supports generators.\n",
      "  warnings.warn('`Model.predict_generator` is deprecated and '\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "44/44 [==============================] - 15s 266ms/step\n"
     ]
    }
   ],
   "source": [
    "predictions=model.predict_generator(validation_generator, steps=len(validation_generator), verbose=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "30f61bd8",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "val_preds = np.round(predictions)# from probabilities to 0 or 1\n",
    "val_trues = validation_generator.classes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "815d8a65",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Confusion Matrix\n",
      "[[277   3   3   5   1]\n",
      " [  0  61   0   0   1]\n",
      " [ 10   1 133   7   6]\n",
      " [ 25   0  17 159   1]\n",
      " [  1   1   0   0 158]]\n"
     ]
    }
   ],
   "source": [
    "#modify:\n",
    "from sklearn.metrics import confusion_matrix\n",
    "from sklearn.metrics import classification_report\n",
    "import numpy as np\n",
    "num_of_test_samples = 870 #number of testing samples\n",
    "batch_size=20 #batch size for the validation set\n",
    "Y_pred = model.predict_generator(validation_generator, num_of_test_samples // batch_size+1)\n",
    "y_pred = np.argmax(Y_pred, axis=1)\n",
    "print('Confusion Matrix')\n",
    "print(confusion_matrix(validation_generator.classes, y_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "fcd5652d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Classification Report\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "         alc       0.88      0.96      0.92       289\n",
      "         ant       0.92      0.98      0.95        62\n",
      "         hip       0.87      0.85      0.86       157\n",
      "         red       0.93      0.79      0.85       202\n",
      "        trag       0.95      0.99      0.97       160\n",
      "\n",
      "    accuracy                           0.91       870\n",
      "   macro avg       0.91      0.91      0.91       870\n",
      "weighted avg       0.91      0.91      0.90       870\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print('Classification Report')\n",
    "target_names = ['alc', 'ant','hip', 'red', 'trag']\n",
    "print(classification_report(validation_generator.classes, y_pred, target_names=target_names))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6f8f01c0",
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ad6ed72d",
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "34cbf1e7",
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "9e82b384",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "#PLOT\n",
    "acc = history.history['accuracy']\n",
    "val_acc = history.history['val_accuracy']\n",
    "loss = history.history['loss']\n",
    "val_loss = history.history['val_loss']\n",
    "\n",
    "epochs = range(len(acc))\n",
    "\n",
    "plt.plot(epochs, acc, 'bo', label='Training acc')\n",
    "plt.plot(epochs, val_acc, 'b', label='Validation acc')\n",
    "plt.title('Training and validation accuracy')\n",
    "plt.legend()\n",
    "\n",
    "plt.figure()\n",
    "\n",
    "plt.plot(epochs, loss, 'bo', label='Training loss')\n",
    "plt.plot(epochs, val_loss, 'b', label='Validation loss')\n",
    "plt.title('Training and validation loss')\n",
    "plt.legend()\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "77f7809c",
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "40b275f2",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a93132bb",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1536eb31",
   "metadata": {},
   "outputs": [],
   "source": [
    "#ENSEMBLE LEARNING"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "1a266eb4",
   "metadata": {},
   "outputs": [],
   "source": [
    "from keras.preprocessing import image\n",
    "import keras.backend as K\n",
    "import numpy as np\n",
    "import cv2\n",
    "import sys"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "b399def3",
   "metadata": {},
   "outputs": [],
   "source": [
    "#cargar modelo:\n",
    "from keras.models import model_from_json\n",
    "# cargar json y crear el modelo\n",
    "json_file = open('vgg19_dropout.json', 'r')\n",
    "loaded_model_json = json_file.read()\n",
    "json_file.close()\n",
    "model1 = model_from_json(loaded_model_json)#change sequentially\n",
    "# cargar pesos al nuevo modelo\n",
    "model1.load_weights(\"vgg19_dropout.h5\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "f336fd20",
   "metadata": {},
   "outputs": [],
   "source": [
    "#cargar modelo:\n",
    "from keras.models import model_from_json\n",
    "# cargar json y crear el modelo\n",
    "json_file = open('resnet_dropout.json', 'r')\n",
    "loaded_model_json = json_file.read()\n",
    "json_file.close()\n",
    "model2 = model_from_json(loaded_model_json)#change sequentially\n",
    "# cargar pesos al nuevo modelo\n",
    "model2.load_weights(\"resnet_dropout.h5\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "b10d0f88",
   "metadata": {},
   "outputs": [],
   "source": [
    "#cargar modelo:\n",
    "from keras.models import model_from_json\n",
    "# cargar json y crear el modelo\n",
    "json_file = open('densenet_dropout.json', 'r')\n",
    "loaded_model_json = json_file.read()\n",
    "json_file.close()\n",
    "model3 = model_from_json(loaded_model_json)#change sequentially\n",
    "# cargar pesos al nuevo modelo\n",
    "model3.load_weights(\"densenet_dropout.h5\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "963f6390",
   "metadata": {},
   "outputs": [],
   "source": [
    "#cargar modelo:\n",
    "from keras.models import model_from_json\n",
    "# cargar json y crear el modelo\n",
    "json_file = open('efficientNet7_dropout.json', 'r')\n",
    "loaded_model_json = json_file.read()\n",
    "json_file.close()\n",
    "model4 = model_from_json(loaded_model_json)#change sequentially\n",
    "# cargar pesos al nuevo modelo\n",
    "model4.load_weights(\"efficientNet7_dropout.h5\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "86b12a64",
   "metadata": {},
   "outputs": [],
   "source": [
    "members=[model1,model2,model3,model4]#actualizar!!!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "46a17b78",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Stacked Test Accuracy: 0.907\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import cross_val_score\n",
    "from sklearn.metrics import accuracy_score\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.ensemble import ExtraTreesClassifier\n",
    "from sklearn.ensemble import GradientBoostingClassifier\n",
    "from sklearn.ensemble import AdaBoostClassifier\n",
    "from sklearn.ensemble import BaggingClassifier\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from keras.models import load_model\n",
    "from keras.utils import to_categorical\n",
    "from numpy import dstack\n",
    "\n",
    " \n",
    "# create stacked model input dataset as outputs from the ensemble\n",
    "def stacked_dataset(members, inputX):\n",
    "\tstackX = None\n",
    "\tfor model in members:\n",
    "\t\t# make prediction\n",
    "\t\tyhat = model.predict(inputX, verbose=0)\n",
    "\t\t# stack predictions into [rows, members, probabilities]\n",
    "\t\tif stackX is None:\n",
    "\t\t\tstackX = yhat\n",
    "\t\telse:\n",
    "\t\t\tstackX = dstack((stackX, yhat))\n",
    "\t# flatten predictions to [rows, members x probabilities]\n",
    "\tstackX = stackX.reshape((stackX.shape[0], stackX.shape[1]*stackX.shape[2]))\n",
    "\treturn stackX\n",
    " \n",
    "# fit a model based on the outputs from the ensemble members\n",
    "def fit_stacked_model(members, inputX, inputy):\n",
    "\t# create dataset using ensemble\n",
    "\tstackedX = stacked_dataset(members, inputX)\n",
    "\t# fit standalone model\n",
    "\t#model = LogisticRegression()#\n",
    "\tmodel = RandomForestClassifier(n_estimators=100, max_depth=None,max_features='auto',min_samples_split=2, random_state=0)# n_estimators=n of trees\n",
    "\t#model = ExtraTreesClassifier()\n",
    "\t#model = GradientBoostingClassifier()\n",
    "\t#model = AdaBoostClassifier(n_estimators=100)\n",
    "\t#model = BaggingClassifier(KNeighborsClassifier(),max_samples=0.5, max_features=0.5)\n",
    "\tmodel.fit(stackedX, inputy)\n",
    "\treturn model\n",
    " \n",
    "# make a prediction with the stacked model\n",
    "def stacked_prediction(members, model, inputX):\n",
    "\t# create dataset using ensemble\n",
    "\tstackedX = stacked_dataset(members, inputX)\n",
    "\t# make a prediction\n",
    "\tyhat = model.predict(stackedX)\n",
    "\treturn yhat\n",
    " \n",
    "\n",
    "# fit stacked model using the ensemble\n",
    "model = fit_stacked_model(members, x_train, y_train)\n",
    "# evaluate model on test set\n",
    "yhat = stacked_prediction(members, model, x_test)\n",
    "acc = accuracy_score(y_test, yhat)\n",
    "print('Stacked Test Accuracy: %.3f' % acc)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "freelance-software",
   "metadata": {},
   "source": [
    "from sklearn.metrics import classification_report\n",
    "val_preds=np.round(yhat)\n",
    "val_trues=y_test\n",
    "print(classification_report(val_trues,val_preds))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "historical-forth",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "soviet-breed",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.92      0.98      0.95       289\n",
      "           1       0.97      1.00      0.98        62\n",
      "           2       0.93      0.86      0.89       157\n",
      "           3       0.96      0.77      0.85       202\n",
      "           4       0.99      0.97      0.98       160\n",
      "\n",
      "   micro avg       0.95      0.91      0.93       870\n",
      "   macro avg       0.95      0.91      0.93       870\n",
      "weighted avg       0.95      0.91      0.92       870\n",
      " samples avg       0.91      0.91      0.91       870\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\IDEA\\Anaconda3\\envs\\gputest\\lib\\site-packages\\sklearn\\metrics\\_classification.py:1245: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in samples with no predicted labels. Use `zero_division` parameter to control this behavior.\n",
      "  _warn_prf(average, modifier, msg_start, len(result))\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import classification_report\n",
    "vp=np.round(yhat)\n",
    "vt=y_test\n",
    "target_names = ['alc', 'ant','hip', 'red', 'trag']\n",
    "print(classification_report(vt,vp,target_names=target_names))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "orange-surgery",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "egyptian-anderson",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "informational-horizontal",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "detailed-measurement",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
